0

http://msdn.microsoft.com/en-us/library/windows/desktop/aa380536(v=VS.85).aspxのコードを使用しようとしています

AcquireCredentialsHandleの行は、2番目の引数がPSECURITY_STRINGと互換性がないことを示しています。私がここで何ができるか誰か知っていますか?

4

1 に答える 1

1

文字列パラメーターを持つほとんどの Win32 API 関数と同様に、が定義されているかどうかに応じてまたはにAcquireCredentialsHandle()マップされるため、それぞれ期待されるまたはポインターになります。一方、Aは構造体をモデルにした構造体で、どちらも UTF-16 でエンコードされた Unicode データのみを含みます。AcquireCredentialsHandleA()AcquireCredentialsHandleW()UNICODEchar*wchar_t*SECURITY_STRINGUNICODE_STRING

SECURITY_STRINGに値を渡すには、まずメンバーの内容を AnsiAcquireCredentialsHandleA()に変換する必要があります。SECURITY_STRING::Buffer

PSECURITY_STRING str;
...
int len = WideCharToMultiByte(0, 0, (LPWSTR)str->Buffer, str->Length, NULL, 0, NULL, NULL);
std::string tmp(len);
WideCharToMultiByte(0, 0, (LPWSTR)str->Buffer, str->Length, &tmp[0], len, NULL, NULL);
AcquireCredentialsHandle(..., tmp.c_str(), ...); 

SECURITY_STRINGに値を渡すには、メンバーをそのままAcquireCredentialsHandleW()渡す必要があります。SECURITY_STRING::Buffer

PSECURITY_STRING str;
...
AcquireCredentialsHandle(..., (LPWSTR)str->Buffer, ...); 

いずれにせよ、それ自体へのポインタを渡しませんSECURITY_STRING

于 2011-12-12T22:55:41.097 に答える