Функция 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 |