"Ge van Geldorp" ge@thinstall.com writes:
+static PSID _GetUserFromToken(HANDLE Token) +{
- char InfoBuffer[64];
- PTOKEN_USER UserInfo;
- DWORD InfoSize;
- PSID Sid;
- DWORD SidSize;
- UserInfo = (PTOKEN_USER) InfoBuffer;
- if (! GetTokenInformation(Token, TokenUser, InfoBuffer, sizeof(InfoBuffer),
&InfoSize))- {
if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)return NULL;UserInfo = HeapAlloc(GetProcessHeap(), 0, InfoSize);if (UserInfo == NULL)return NULL;if (! GetTokenInformation(Token, TokenUser, UserInfo, InfoSize,&InfoSize)){HeapFree(GetProcessHeap(), 0, UserInfo);return NULL;}- }
- SidSize = GetLengthSid(UserInfo->User.Sid);
- Sid = HeapAlloc(GetProcessHeap(), 0, SidSize);
- if (Sid == NULL)
- {
if (UserInfo != (PTOKEN_USER) InfoBuffer)HeapFree(GetProcessHeap(), 0, UserInfo);return NULL;- }
- if (! CopySid(SidSize, Sid, UserInfo->User.Sid))
- {
HeapFree(GetProcessHeap(), 0, Sid);Sid = NULL;- }
You should return a string directly, there's no reason to make a copy of the SID.
From: Alexandre Julliard [mailto:julliard@winehq.org]
"Ge van Geldorp" ge@thinstall.com writes:
- if (! CopySid(SidSize, Sid, UserInfo->User.Sid))
- {
HeapFree(GetProcessHeap(), 0, Sid);Sid = NULL;- }
You should return a string directly, there's no reason to make a copy of the SID.
There's no way for the caller to free the memory if I return UserInfo->User.Sid directly.
Ge van Geldorp.
"Ge van Geldorp" ge@thinstall.com writes:
From: Alexandre Julliard [mailto:julliard@winehq.org] You should return a string directly, there's no reason to make a copy of the SID.
There's no way for the caller to free the memory if I return UserInfo->User.Sid directly.
Of course, that's why I said you should return the string, not the SID. There's no reason to split that functionality into two separate functions.