Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите, не могу вывести шару.

39K
14 ноября 2008 года
YouROK
12 / / 27.10.2008
Вот код:
Код:
#include "stdafx.h"

#include <windows.h>
#include <stdio.h>
#include <lm.h>
#pragma comment(lib,"Netapi32.lib")

int wmain(int argc, char *lpszArgv[ ])
{
    PSHARE_INFO_502 BufPtr,p;
    NET_API_STATUS res;
    DWORD er=0,tr=0,resume=0;

    res=NetShareEnum(NULL,502,(LPBYTE *)&BufPtr, -1, &er, &tr, &resume);
    p=BufPtr;

    for (int i=1;i<er;i++)
        {
            printf("%S\n%S\n\n",p->shi502_netname, p->shi502_path);
            p++;
        }
    NetApiBufferFree(BufPtr);
    char c;
    gets(&c);
    return 0;
}


Показывает все шары кроме папок с русскими именами, подскажите мож че в коде не правильно сделано или дайте примерчик с использованием функций WNetEnumResource, с ней разберался но так и не смог вывести папки, дайте простенький пример на вывод своей шары.
288
14 ноября 2008 года
nikitozz
1.2K / / 09.03.2007
Цитата: YouROK
или дайте примерчик с использованием функций WNetEnumResource, с ней разберался но так и не смог вывести папки, дайте простенький пример на вывод своей шары.



По-моему лучший пример

Код:
BOOL WINAPI EnumerateFunc(HWND hwnd,
                          HDC hdc,
                          LPNETRESOURCE lpnr)
{
  DWORD dwResult, dwResultEnum;
  HANDLE hEnum;
  DWORD cbBuffer = 16384;      // 16K is a good size
  DWORD cEntries = -1;         // enumerate all possible entries
  LPNETRESOURCE lpnrLocal;     // pointer to enumerated structures
  DWORD i;
  //
  // Call the WNetOpenEnum function to begin the enumeration.
  //
  dwResult = WNetOpenEnum(RESOURCE_GLOBALNET, // all network resources
                          RESOURCETYPE_ANY,   // all resources
                          0,        // enumerate all resources
                          lpnr,     // NULL first time the function is called
                          &hEnum);  // handle to the resource

  if (dwResult != NO_ERROR)
  {  
    //
    // Process errors with an application-defined error handler.
    //
    NetErrorHandler(hwnd, dwResult, (LPSTR)"WNetOpenEnum");
    return FALSE;
  }
  //
  // Call the GlobalAlloc function to allocate resources.
  //
  lpnrLocal = (LPNETRESOURCE) GlobalAlloc(GPTR, cbBuffer);
  if (lpnrLocal == NULL)
      return FALSE;
 
  do
  {  
    //
    // Initialize the buffer.
    //
    ZeroMemory(lpnrLocal, cbBuffer);
    //
    // Call the WNetEnumResource function to continue
    //  the enumeration.
    //
    dwResultEnum = WNetEnumResource(hEnum,      // resource handle
                                    &cEntries,  // defined locally as -1
                                    lpnrLocal,  // LPNETRESOURCE
                                    &cbBuffer); // buffer size
    //
    // If the call succeeds, loop through the structures.
    //
    if (dwResultEnum == NO_ERROR)
    {
      for(i = 0; i < cEntries; i++)
      {
        // Call an application-defined function to
        //  display the contents of the NETRESOURCE structures.
        //
        DisplayStruct(hdc, &lpnrLocal);

        // If the NETRESOURCE structure represents a container resource,
        //  call the EnumerateFunc function recursively.

        if(RESOURCEUSAGE_CONTAINER == (lpnrLocal.dwUsage
                                       & RESOURCEUSAGE_CONTAINER))
          if(!EnumerateFunc(hwnd, hdc, &lpnrLocal))
            TextOut(hdc, 10, 10, "EnumerateFunc returned FALSE.", 29);
      }
    }
    // Process errors.
    //
    else if (dwResultEnum != ERROR_NO_MORE_ITEMS)
    {
      NetErrorHandler(hwnd, dwResultEnum, (LPSTR)"WNetEnumResource");
      break;
    }
  }
  //
  // End do.
  //
  while(dwResultEnum != ERROR_NO_MORE_ITEMS);
  //
  // Call the GlobalFree function to free the memory.
  //
  GlobalFree((HGLOBAL)lpnrLocal);
  //
  // Call WNetCloseEnum to end the enumeration.
  //
  dwResult = WNetCloseEnum(hEnum);
 
  if(dwResult != NO_ERROR)
  {
    //
    // Process errors.
    //
    NetErrorHandler(hwnd, dwResult, (LPSTR)"WNetCloseEnum");
    return FALSE;
  }

  return TRUE;
}
39K
14 ноября 2008 года
YouROK
12 / / 27.10.2008
Переделал для консоли и не работает

Цитата:
lpnrLocal = (LPNETRESOURCE) GlobalAlloc(GPTR, cbBuffer);
if (lpnrLocal == NULL)
return FALSE;


не выделяеться память доходит до return false;
и проходит дальше в цикл
и ничего не показываеться.
Ниче не понимаю, как такое возможно.

39K
14 ноября 2008 года
YouROK
12 / / 27.10.2008
Понял что за ошибка, оказываеться не правильно переводится из unicod в ansii.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог