Поделиться через


Функция NetApiBufferAllocate (lmapibuf.h)

Функция NetApiBufferAllocate выделяет память из кучи. Используйте эту функцию, только если требуется совместимость с функцией NetApiBufferFree . В противном случае используйте функции управления памятью.

Синтаксис

NET_API_STATUS NET_API_FUNCTION NetApiBufferAllocate(
  [in]  DWORD  ByteCount,
  [out] LPVOID *Buffer
);

Параметры

[in] ByteCount

Число выделенных байтов.

[out] Buffer

Получает указатель на выделенный буфер.

Возвращаемое значение

Если функция выполняется успешно, возвращаемое значение будет NERR_Success.

Если функция завершается сбоем, возвращаемое значение представляет собой системный код ошибки. Список кодов ошибок см. в разделе Системные коды ошибок.

Комментарии

Для успешного выполнения функций ApiBuffer не требуется специальное членство в группах.

Дополнительные сведения см. в разделах Буферы функций управления сетью и Длина буфера функции управления сетью.

Примеры

В следующем примере кода показано, как использовать функции ApiBuffer для управления сетью.

В примере сначала вызывается функция NetApiBufferAllocate для выделения памяти, а затем функция NetApiBufferSize для получения размера выделенной памяти. После этого в примере вызывается NetApiBufferReallocate для изменения размера выделения памяти. Наконец, в примере вызывается NetApiBufferFree , чтобы освободить память. В каждом случае в примере выводится сообщение об успешном или неудачном выполнении.

#ifndef UNICODE
#define UNICODE
#endif

#include <windows.h>
#include <lm.h>
#include <stdio.h>

#pragma comment(lib, "netapi32.lib")

void PrintError(LPSTR lpszApi, DWORD res);

int main()
{
   PUSER_INFO_10 p;
   DWORD res, dwSize;

   // Call the NetApiBufferAllocate function 
   //   to allocate the memory. If successful,
   //   print a message.
   //
   res = NetApiBufferAllocate(1024, (LPVOID *) &p);
   if(res == NERR_Success)
   {
      printf("NetApiBufferAllocate:   Allocated 1024 bytes.\n");

      // Call the NetApiBufferSize function 
      //   to retrieve the size of the allocated buffer.
      //   If successful, print the size.
      //
      res = NetApiBufferSize(p, &dwSize);
      if(res == NERR_Success)
      {
         printf("NetApiBufferSize:       Buffer has %u bytes.\n", dwSize);

         // Call the NetApiBufferReallocate function
         //   to change the size of the allocated memory.
         //   If successful, print the new size of the buffer.
         //
         res = NetApiBufferReallocate(p, dwSize * 2, (LPVOID *) &p);   
         if(res == NERR_Success)
            printf("NetApiBufferReallocate: Re-Allocated %u bytes.\n", dwSize * 2);
         else
            PrintError("NetApiBufferReallocate", res);

         // Call the NetApiBufferFree function
         //    to free the allocated memory.
         //    If successful, print a message.
         //
         res = NetApiBufferFree(p);
         if(res == NERR_Success)
            printf("Freed Buffer\n");

         else
            PrintError("NetApiBufferFree", res);
      }
      else
         PrintError("NetApiBufferSize", res);
   }         
   else
      PrintError("NetApiBufferAllocate", res);
   return 0;
}

void PrintError(LPSTR lpszApi, DWORD res)
{
   printf("%s: Error %u\n", lpszApi, res);
   return;
}

Требования

   
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header lmapibuf.h (включая Lm.h)
Библиотека Netapi32.lib
DLL Netapi32.dll

См. также раздел

Функции буфера API

NetApiBufferFree

NetApiBufferReallocate

Функции управления сетью

Общие сведения об управлении сетью