这是我关于Stackoverflow的第一个问题,所以请原谅我。
使用我的C++ MFC应用程序,我将使用以下代码获取当前登录的Windows的本地组:
#include <windows.h>
#include <lm.h>
#include <stdio.h>
#include <sstream>
#pragma comment(lib, "netapi32")
int test()
{
char acUserName[100];
DWORD nUserName = sizeof(acUserName);
if (GetUserName(acUserName, &nUserName))
{
sysout( "User name is " << acUserName << "." << endl);
}
//printf("Local groups: \n");
sysout("Local groups :\n");
LPBYTE buffer;
DWORD entries, total_entries;
NetUserGetLocalGroups(NULL, L"EUROPE\\D*****", 0, LG_INCLUDE_INDIRECT, &buffer, MAX_PREFERRED_LENGTH, &entries, &total_entries);
LOCALGROUP_USERS_INFO_0 *groups = (LOCALGROUP_USERS_INFO_0*)buffer;
for (int i = 0; i<entries; i++)
{
sysout(groups[i].lgrui0_name << endl);
}
sysout("Entries Local: " << entries << endl);
NetApiBufferFree(buffer);
//printf("Global groups: \n");
sysout("Global groups: \n");
NetUserGetGroups(NULL, L"EUROPE\\DEU218535", 0, &buffer, MAX_PREFERRED_LENGTH, &entries, &total_entries);
sysout("Entries Global: " << entries << endl);
GROUP_USERS_INFO_0 *ggroups = (GROUP_USERS_INFO_0*)buffer;
for (int i = 0; i<entries; i++)
{
//printf("\t%S\n", ggroups[i].grui0_name);
sysout(ggroups[i].grui0_name << endl);
}
NetApiBufferFree(buffer);
return 0;
}注意:我在Visual中为更容易地打印控制台定义了sysout
#define sysout( s ) \
{ \
std::ostringstream os_; \
os_ << s; \
OutputDebugString( os_.str().c_str() ); \
}运行test()时得到的输出如下:
User name is D*****.
Local groups :
007A1E02
007A1DD6
007A1DCA
Entries Local: 3
Global groups:
Entries Global: 0附加信息:
我正在使用多字节字符集.
我知道:
007A1E02007A1DD6007A1DCA..。看上去有点像记忆地址。我尝试了一切,将位置重新解释为可读的数据类型,但没有成功。
在使用GetUserName之前,我使用了GetUserNameW,它还返回了一个内存地址,而不是明文。也许有联系?
谢谢你的帮助!
https://stackoverflow.com/questions/48810503
复制相似问题