저는 C++ 개발자가 아니므로 내 프로그램이 작동하지 않는 것은 내 잘못이라고 생각합니다. Windows 그룹의 SID를 조회하고 읽을 수있는 SID를 반환하고 싶습니다.SID를 문자열로 변환
wchar_t* SpcLookupName(LPCTSTR lpszSystemName, LPCTSTR lpszAccountName) {
PSID Sid;
DWORD cbReferencedDomainName, cbSid;
LPTSTR ReferencedDomainName;
SID_NAME_USE eUse;
cbReferencedDomainName = cbSid = 0;
if (LookupAccountName(lpszSystemName, lpszAccountName, 0, &cbSid,
0, &cbReferencedDomainName, &eUse)) {
SetLastError(ERROR_NONE_MAPPED);
return 0;
}
if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) return 0;
if (!(Sid = (PSID)LocalAlloc(LMEM_FIXED, cbSid))) return 0;
ReferencedDomainName = (LPTSTR)LocalAlloc(LMEM_FIXED, cbReferencedDomainName);
if (!ReferencedDomainName) {
LocalFree(Sid);
return 0;
}
if (!LookupAccountName(lpszSystemName, lpszAccountName, Sid, &cbSid,
ReferencedDomainName, &cbReferencedDomainName, &eUse)) {
LocalFree(ReferencedDomainName);
LocalFree(Sid);
return 0;
}
wchar_t* psz;
// Loading ConvertSidToStringSid
typedef BOOL (WINAPI *tConvertSidToStringSid)(PSID,wchar_t*);
tConvertSidToStringSid pConvertSidToStringSid=0;
HINSTANCE handle = ::LoadLibrary("Advapi32.dll");
pConvertSidToStringSid = (tConvertSidToStringSid) ::GetProcAddress(handle, "ConvertSidToStringSidA");
if(pConvertSidToStringSid(Sid, psz)){
return psz;
}
}
제 문제는 함수가 SID가 아닌 이상한 문자 만 반환한다는 것입니다. 이유는 무엇입니까?
어떻게 지내요? -이 함수는 문자열에 대한 포인터를 반환합니다. print 문을 볼 수 없습니까? – Tom
나는 그것을 메시지 상자로 테스트했지만, 지금은 코드에 나와 있지 않다. – Taram777
정말 PowerShell이나 .net 또는 Python 같은 곳에서 쉽게 사용할 수 있습니다. 이처럼 C++에서 도구를 해킹하는 것은 고통 스럽습니다. 특히 C++에 능통하지 않은 경우 특히 그렇습니다. 어쨌든이 작업을 수행 할 수있는 res 키트 콘솔 앱이있을 것입니다. –