Robert Shearman rob@codeweavers.com writes:
+tryagain:
SERVER_START_REQ( get_token_groups ) {
TOKEN_GROUPS *tgroups = tokeninfo;
SID_IDENTIFIER_AUTHORITY sid = {SECURITY_NT_AUTHORITY};
TOKEN_GROUPS *groups = tokeninfo;
/* we need to show admin privileges ! */
tgroups->GroupCount = 1;
tgroups->Groups->Attributes = SE_GROUP_ENABLED;
RtlAllocateAndInitializeSid( &sid,
2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0,
&(tgroups->Groups->Sid));
req->handle = token;
wine_server_set_reply( req, buffer, server_buf_len );
status = wine_server_call( req );
if (status == STATUS_BUFFER_TOO_SMALL)
{
if (buffer == stack_buffer)
buffer = RtlAllocateHeap(GetProcessHeap(), 0, reply->user_len);
else
buffer = RtlReAllocateHeap(GetProcessHeap(), 0, buffer, reply->user_len);
if (!buffer) return STATUS_NO_MEMORY;
server_buf_len = reply->user_len;
goto tryagain;
You shouldn't return or goto out of a SERVER_START_REQ block. SERVER_END_REQ currently doesn't do much, but that could change.