私は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キットコンソールアプリケーションさえあるでしょう! –