Использование NetGroupGetUsers - PullRequest
0 голосов
/ 02 ноября 2011

Я хочу получить пользователей группы, используя функцию NetGroupGetUsers.

DWORD dwError = 0;
NET_API_STATUS nStatus;
LPDWORD entriesread=0;
LPDWORD totalentries=0;
LPBYTE *buff;
nStatus=NetGroupGetUsers(NULL,L"Users",0,buff,MAX_PREFERRED_LENGTH,
                          entriesread,totalentries,NULL);

Когда я использую это, я получаю эту ошибку;

xC0000005: Access violation reading location 0xffffffffffffffff.

И как я могу прочитать баффкогда это работает?А также я попробовал это;

GROUP_USERS_INFO_0 *buff;
nStatus=NetGroupGetUsers(NULL,L"Users",0,(LPBYTE*)&buff,MAX_PREFERRED_LENGTH,
entriesread,totalentries,NULL);

, но произошла та же ошибка.

РЕДАКТИРОВАТЬ: значение nStatus равно NERR_GroupNotFound Я думаю, что причиной нарушения доступа является попытка прочитать бафф, который не 'на самом деле установлено.

РЕДАКТИРОВАТЬ 2: я использовал эту функцию NetLocalGroupGetMembers.сейчас это дает успех, но buff->grui0_name не имеет смысла.есть пользователь с именем "ali", но значение buff->grui0_name просто "d".ЧТО Я ДЕЛАЮ НЕПРАВИЛЬНО?

Последний код;

LPCWSTR TargetGroup = L"group1";

DWORD dwError = 0;
NET_API_STATUS stat;

GROUP_USERS_INFO_0 *buff;
LPDWORD entriesread=new DWORD;
LPDWORD totalentries=new DWORD;

stat=NetGroupGetUsers(NULL,TargetGroup,0,(LPBYTE *)&buff,MAX_PREFERRED_LENGTH,
                          entriesread,totalentries,NULL);

для РЕДАКТИРОВАНИЯ 2;

stat=NetLocalGroupGetMembers(NULL,TargetGroup,0,(LPBYTE *)&buff,
                  MAX_PREFERRED_LENGTH,entriesread,totalentries,NULL);

Пожалуйста, помогите ...

Ответы [ 4 ]

1 голос
/ 11 июня 2019

Вот версия без нового:

LPCWSTR TargetGroup = L"group1";

NET_API_STATUS stat;

LOCALGROUP_MEMBERS_INFO_1 *buff;
DWORD entriesread;
DWORD totalentries;

stat = NetLocalGroupGetMembers(NULL,TargetGroup,1,(LPBYTE *)&buff,
    MAX_PREFERRED_LENGTH,&entriesread,&totalentries,NULL);

wprintf(buff->lgrmi1_name);
1 голос
/ 02 ноября 2011

Вы не выделили памяти для buff.Вы должны писать

GROUP_USERS_INFO_0 *buff;
... NetGroupGetUsers(..., (LPBYTE*)&buff, ...);

, в противном случае вы говорите NetGroupGetUsers записать результаты в мусорную папку.Обратите внимание, что параметр bufptr задокументирован как [out].Это означает, что вызывающий абонент должен указать, куда должен идти результат. Вызов функции - это больше, чем просто соответствие типов .

Я удивлен, что вы не получили предупреждение "use of initialized variable" от компилятора.

0 голосов
/ 03 ноября 2011
LPCWSTR TargetGroup = L"group1";

NET_API_STATUS stat;

LOCALGROUP_MEMBERS_INFO_1 *buff;
LPDWORD entriesread=new DWORD;
LPDWORD totalentries=new DWORD;

stat=NetLocalGroupGetMembers(NULL,TargetGroup,1,(LPBYTE *)&buff,
                        MAX_PREFERRED_LENGTH,entriesread,totalentries,NULL);



wprintf(buff->lgrmi1_name);

Этот код отлично работает сейчас.Спасибо всем.

0 голосов
/ 02 ноября 2011

Пожалуйста, эту ссылку (http://www.codeguru.com/forum/archive/index.php/t-116634.html) для справки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...