Darshan Parab Ответов: 2

Печать записей из локальной группы администраторов


Привет Ребята,

Я написал этот код, чтобы получить список объектов из группы администраторов системы. Я могу извлечь данные из системы, но не могу понять, как печатать каждую запись отдельно.

#include <iostream>
#include <windows.h>
#include <lm.h>
using namespace std;

int main(int argc, char** argv)
{
	wchar_t LOCALGRP[100]= L"Administrators";
	DWORD bfSize = MAX_COMPUTERNAME_LENGTH+1;
	DWORD LEVEL=1;
	LPBYTE bufptr;
	bool RET;
	DWORD prefmaxlength = MAX_PREFERRED_LENGTH;
	NET_API_STATUS STATUS;
	DWORD entriesread;
	DWORD totalentries;

	STATUS = NetLocalGroupGetMembers(NULL,LOCALGRP,LEVEL,&bufptr,prefmaxlength,&entriesread,&totalentries,0);
	
	cout<<entriesread<<" "<<totalentries<<endl;
	
	system("PAUSE");
	return 0;
}


Что я уже пробовал:

Объект, возвращаемый функцией NetLocalGroupGetMembers, имеет формат структуры LOCALGROUP_MEMBERS_INFO_1. Согласно документации Microsoft bufptr указывает на адрес, где хранится возвращаемый объект. Не в состоянии понять, как печатать информацию из этой структуры.

2 Ответов

Рейтинг:
1

Darshan Parab

Код сработал.

#include <iostream>
#include <windows.h>
#include <lm.h>
using namespace std;

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv)
{
	wchar_t LOCALGRP[100]= L"Administrators";
	DWORD LEVEL=1, prefmaxlength=MAX_PREFERRED_LENGTH, entriesread, totalentries;
	PLOCALGROUP_MEMBERS_INFO_1 bufptr;

	system("cls");
	NetLocalGroupGetMembers(NULL,LOCALGRP,LEVEL,(LPBYTE *)&bufptr,prefmaxlength,&entriesread,&totalentries,0);
	
	for(int i=0; i<entriesread; i++)<!--="" newline="" --="">	{
		if(bufptr[i].lgrmi1_sidusage == SidTypeUser)
		{
			wcout<<bufptr[i].lgrmi1_name<<endl;<!-- newline="" --="">		}
	}
	NetApiBufferFree(&bufptr);
	system("PAUSE");
		
	return 0;
}

</bufptr[i].lgrmi1_name<<endl;<!--></entriesread;></lm.h></windows.h></iostream>


Рейтинг:
0

Richard MacCutchan

Документация MSDN точно объясняет, что содержит каждое поле: Структура LOCALGROUP_MEMBERS_INFO_1 (Windows)[^]. Вы должны объявить bufptr как PLOCALGROUP_MEMBERS_INFO_1 введите, а не LPBYTE, что позволит вам легко получить доступ к каждому полю.


Darshan Parab

Привет Ричард,

Я попробовал это сделать, и там написано:

[Ошибка] не удается преобразовать 'LOCALGROUP_MEMBERS_INFO_1* {ака _LOCALGROUP_MEMBERS_INFO_1*}' в 'байт** {ака без знака типа char*}' для параметра '4' до 'типа DWORD NetLocalGroupGetMembers(LPCWSTR, LPCWSTR, параметра байт**, параметр DWORD LPDWORD, LPDWORD, PDWORD_PTR)'

Richard MacCutchan

Вам просто нужно использовать приведение (PBYTE*) к имени переменной.