advapi32: Use heap helpers in security code.

This commit is contained in:
Nikolay Sivov 2014-08-27 15:48:17 +04:00 committed by Alexandre Julliard
parent 334eedb09e
commit b60a2710f8
2 changed files with 60 additions and 67 deletions

View File

@ -78,7 +78,7 @@ static void* ADVAPI_GetDomainName(unsigned sz, unsigned ofs)
ret = RegQueryValueExW(key, wg, NULL, NULL, NULL, &size); ret = RegQueryValueExW(key, wg, NULL, NULL, NULL, &size);
if (ret == ERROR_MORE_DATA || ret == ERROR_SUCCESS) if (ret == ERROR_MORE_DATA || ret == ERROR_SUCCESS)
{ {
ptr = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sz + size); ptr = heap_alloc_zero(sz + size);
if (!ptr) return NULL; if (!ptr) return NULL;
ustr = (UNICODE_STRING*)(ptr + ofs); ustr = (UNICODE_STRING*)(ptr + ofs);
ustr->MaximumLength = size; ustr->MaximumLength = size;
@ -86,7 +86,7 @@ static void* ADVAPI_GetDomainName(unsigned sz, unsigned ofs)
ret = RegQueryValueExW(key, wg, NULL, NULL, (LPBYTE)ustr->Buffer, &size); ret = RegQueryValueExW(key, wg, NULL, NULL, (LPBYTE)ustr->Buffer, &size);
if (ret != ERROR_SUCCESS) if (ret != ERROR_SUCCESS)
{ {
HeapFree(GetProcessHeap(), 0, ptr); heap_free(ptr);
ptr = NULL; ptr = NULL;
} }
else ustr->Length = size - sizeof(WCHAR); else ustr->Length = size - sizeof(WCHAR);
@ -96,8 +96,7 @@ static void* ADVAPI_GetDomainName(unsigned sz, unsigned ofs)
if (!ptr) if (!ptr)
{ {
static const WCHAR wDomain[] = {'D','O','M','A','I','N','\0'}; static const WCHAR wDomain[] = {'D','O','M','A','I','N','\0'};
ptr = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, ptr = heap_alloc_zero(sz + sizeof(wDomain));
sz + sizeof(wDomain));
if (!ptr) return NULL; if (!ptr) return NULL;
ustr = (UNICODE_STRING*)(ptr + ofs); ustr = (UNICODE_STRING*)(ptr + ofs);
ustr->MaximumLength = sizeof(wDomain); ustr->MaximumLength = sizeof(wDomain);
@ -265,7 +264,7 @@ NTSTATUS WINAPI LsaFreeMemory(IN PVOID Buffer)
{ {
TRACE("(%p)\n", Buffer); TRACE("(%p)\n", Buffer);
HeapFree(GetProcessHeap(), 0, Buffer); heap_free(Buffer);
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
@ -689,8 +688,7 @@ NTSTATUS WINAPI LsaQueryInformationPolicy(
{ {
case PolicyAuditEventsInformation: /* 2 */ case PolicyAuditEventsInformation: /* 2 */
{ {
PPOLICY_AUDIT_EVENTS_INFO p = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, PPOLICY_AUDIT_EVENTS_INFO p = heap_alloc_zero(sizeof(POLICY_AUDIT_EVENTS_INFO));
sizeof(POLICY_AUDIT_EVENTS_INFO));
p->AuditingMode = FALSE; /* no auditing */ p->AuditingMode = FALSE; /* no auditing */
*Buffer = p; *Buffer = p;
} }
@ -720,7 +718,7 @@ NTSTATUS WINAPI LsaQueryInformationPolicy(
}; };
DWORD dwSize = MAX_COMPUTERNAME_LENGTH + 1; DWORD dwSize = MAX_COMPUTERNAME_LENGTH + 1;
struct di * xdi = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*xdi)); struct di * xdi = heap_alloc_zero(sizeof(*xdi));
xdi->info.DomainName.MaximumLength = dwSize * sizeof(WCHAR); xdi->info.DomainName.MaximumLength = dwSize * sizeof(WCHAR);
xdi->info.DomainName.Buffer = xdi->domain; xdi->info.DomainName.Buffer = xdi->domain;
@ -733,7 +731,7 @@ NTSTATUS WINAPI LsaQueryInformationPolicy(
if (!ADVAPI_GetComputerSid(&xdi->sid)) if (!ADVAPI_GetComputerSid(&xdi->sid))
{ {
HeapFree(GetProcessHeap(), 0, xdi); heap_free(xdi);
WARN("Computer SID not found\n"); WARN("Computer SID not found\n");

View File

@ -494,12 +494,12 @@ BOOL ADVAPI_IsLocalComputer(LPCWSTR ServerName)
if (!ServerName || !ServerName[0]) if (!ServerName || !ServerName[0])
return TRUE; return TRUE;
buf = HeapAlloc(GetProcessHeap(), 0, dwSize * sizeof(WCHAR)); buf = heap_alloc(dwSize * sizeof(WCHAR));
Result = GetComputerNameW(buf, &dwSize); Result = GetComputerNameW(buf, &dwSize);
if (Result && (ServerName[0] == '\\') && (ServerName[1] == '\\')) if (Result && (ServerName[0] == '\\') && (ServerName[1] == '\\'))
ServerName += 2; ServerName += 2;
Result = Result && !lstrcmpW(ServerName, buf); Result = Result && !lstrcmpW(ServerName, buf);
HeapFree(GetProcessHeap(), 0, buf); heap_free(buf);
return Result; return Result;
} }
@ -686,7 +686,7 @@ CheckTokenMembership( HANDLE token, PSID sid_to_check,
if (!ret && GetLastError() != ERROR_INSUFFICIENT_BUFFER) if (!ret && GetLastError() != ERROR_INSUFFICIENT_BUFFER)
goto exit; goto exit;
token_groups = HeapAlloc(GetProcessHeap(), 0, size); token_groups = heap_alloc(size);
if (!token_groups) if (!token_groups)
{ {
ret = FALSE; ret = FALSE;
@ -712,7 +712,7 @@ CheckTokenMembership( HANDLE token, PSID sid_to_check,
} }
exit: exit:
HeapFree(GetProcessHeap(), 0, token_groups); heap_free(token_groups);
if (thread_token != NULL) CloseHandle(thread_token); if (thread_token != NULL) CloseHandle(thread_token);
return ret; return ret;
@ -1051,7 +1051,7 @@ IsTokenRestricted( HANDLE TokenHandle )
if (status != STATUS_BUFFER_TOO_SMALL) if (status != STATUS_BUFFER_TOO_SMALL)
return FALSE; return FALSE;
groups = HeapAlloc(GetProcessHeap(), 0, size); groups = heap_alloc(size);
if (!groups) if (!groups)
{ {
SetLastError(ERROR_OUTOFMEMORY); SetLastError(ERROR_OUTOFMEMORY);
@ -1061,16 +1061,12 @@ IsTokenRestricted( HANDLE TokenHandle )
status = NtQueryInformationToken(TokenHandle, TokenRestrictedSids, groups, size, &size); status = NtQueryInformationToken(TokenHandle, TokenRestrictedSids, groups, size, &size);
if (status != STATUS_SUCCESS) if (status != STATUS_SUCCESS)
{ {
HeapFree(GetProcessHeap(), 0, groups); heap_free(groups);
return set_ntstatus(status); return set_ntstatus(status);
} }
if (groups->GroupCount) restricted = groups->GroupCount > 0;
restricted = TRUE; heap_free(groups);
else
restricted = FALSE;
HeapFree(GetProcessHeap(), 0, groups);
return restricted; return restricted;
} }
@ -1893,7 +1889,7 @@ LookupPrivilegeNameA( LPCSTR lpSystemName, PLUID lpLuid, LPSTR lpName,
ret = LookupPrivilegeNameW(lpSystemNameW.Buffer, lpLuid, NULL, &wLen); ret = LookupPrivilegeNameW(lpSystemNameW.Buffer, lpLuid, NULL, &wLen);
if (!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER) if (!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{ {
LPWSTR lpNameW = HeapAlloc(GetProcessHeap(), 0, wLen * sizeof(WCHAR)); LPWSTR lpNameW = heap_alloc(wLen * sizeof(WCHAR));
ret = LookupPrivilegeNameW(lpSystemNameW.Buffer, lpLuid, lpNameW, ret = LookupPrivilegeNameW(lpSystemNameW.Buffer, lpLuid, lpNameW,
&wLen); &wLen);
@ -1922,7 +1918,7 @@ LookupPrivilegeNameA( LPCSTR lpSystemName, PLUID lpLuid, LPSTR lpName,
*cchName = len - 1; *cchName = len - 1;
} }
} }
HeapFree(GetProcessHeap(), 0, lpNameW); heap_free(lpNameW);
} }
RtlFreeUnicodeString(&lpSystemNameW); RtlFreeUnicodeString(&lpSystemNameW);
return ret; return ret;
@ -2020,7 +2016,7 @@ GetFileSecurityA( LPCSTR lpFileName,
name = SERV_dup(lpFileName); name = SERV_dup(lpFileName);
r = GetFileSecurityW( name, RequestedInformation, pSecurityDescriptor, r = GetFileSecurityW( name, RequestedInformation, pSecurityDescriptor,
nLength, lpnLengthNeeded ); nLength, lpnLengthNeeded );
HeapFree( GetProcessHeap(), 0, name ); heap_free( name );
return r; return r;
} }
@ -2085,9 +2081,9 @@ LookupAccountSidA(
systemW = SERV_dup(system); systemW = SERV_dup(system);
if (account) if (account)
accountW = HeapAlloc( GetProcessHeap(), 0, accountSizeW * sizeof(WCHAR) ); accountW = heap_alloc( accountSizeW * sizeof(WCHAR) );
if (domain) if (domain)
domainW = HeapAlloc( GetProcessHeap(), 0, domainSizeW * sizeof(WCHAR) ); domainW = heap_alloc( domainSizeW * sizeof(WCHAR) );
r = LookupAccountSidW( systemW, sid, accountW, &accountSizeW, domainW, &domainSizeW, name_use ); r = LookupAccountSidW( systemW, sid, accountW, &accountSizeW, domainW, &domainSizeW, name_use );
@ -2112,9 +2108,9 @@ LookupAccountSidA(
*domainSize = domainSizeW + 1; *domainSize = domainSizeW + 1;
} }
HeapFree( GetProcessHeap(), 0, systemW ); heap_free( systemW );
HeapFree( GetProcessHeap(), 0, accountW ); heap_free( accountW );
HeapFree( GetProcessHeap(), 0, domainW ); heap_free( domainW );
return r; return r;
} }
@ -2183,7 +2179,7 @@ LookupAccountSidW(
DWORD size = MAX_COMPUTERNAME_LENGTH + 1; DWORD size = MAX_COMPUTERNAME_LENGTH + 1;
BOOL result; BOOL result;
computer_name = HeapAlloc(GetProcessHeap(), 0, size * sizeof(WCHAR)); computer_name = heap_alloc(size * sizeof(WCHAR));
result = GetComputerNameW(computer_name, &size); result = GetComputerNameW(computer_name, &size);
if (result) { if (result) {
@ -2236,8 +2232,7 @@ LookupAccountSidW(
break; break;
case 1000: /* first user account */ case 1000: /* first user account */
size = UNLEN + 1; size = UNLEN + 1;
account_name = HeapAlloc( account_name = heap_alloc(size * sizeof(WCHAR));
GetProcessHeap(), 0, size * sizeof(WCHAR));
if (GetUserNameW(account_name, &size)) if (GetUserNameW(account_name, &size))
ac = account_name; ac = account_name;
else else
@ -2284,14 +2279,14 @@ LookupAccountSidW(
else else
*accountSize = ac_len + 1; *accountSize = ac_len + 1;
HeapFree(GetProcessHeap(), 0, account_name); heap_free(account_name);
HeapFree(GetProcessHeap(), 0, computer_name); heap_free(computer_name);
if (status) *name_use = use; if (status) *name_use = use;
return status; return status;
} }
HeapFree(GetProcessHeap(), 0, account_name); heap_free(account_name);
HeapFree(GetProcessHeap(), 0, computer_name); heap_free(computer_name);
SetLastError(ERROR_NONE_MAPPED); SetLastError(ERROR_NONE_MAPPED);
return FALSE; return FALSE;
} }
@ -2310,7 +2305,7 @@ BOOL WINAPI SetFileSecurityA( LPCSTR lpFileName,
name = SERV_dup(lpFileName); name = SERV_dup(lpFileName);
r = SetFileSecurityW( name, RequestedInformation, pSecurityDescriptor ); r = SetFileSecurityW( name, RequestedInformation, pSecurityDescriptor );
HeapFree( GetProcessHeap(), 0, name ); heap_free( name );
return r; return r;
} }
@ -2630,7 +2625,7 @@ LookupAccountNameA(
RtlCreateUnicodeStringFromAsciiz(&lpAccountW, account); RtlCreateUnicodeStringFromAsciiz(&lpAccountW, account);
if (ReferencedDomainName) if (ReferencedDomainName)
lpReferencedDomainNameW = HeapAlloc(GetProcessHeap(), 0, *cbReferencedDomainName * sizeof(WCHAR)); lpReferencedDomainNameW = heap_alloc(*cbReferencedDomainName * sizeof(WCHAR));
ret = LookupAccountNameW(lpSystemW.Buffer, lpAccountW.Buffer, sid, cbSid, lpReferencedDomainNameW, ret = LookupAccountNameW(lpSystemW.Buffer, lpAccountW.Buffer, sid, cbSid, lpReferencedDomainNameW,
cbReferencedDomainName, name_use); cbReferencedDomainName, name_use);
@ -2643,7 +2638,7 @@ LookupAccountNameA(
RtlFreeUnicodeString(&lpSystemW); RtlFreeUnicodeString(&lpSystemW);
RtlFreeUnicodeString(&lpAccountW); RtlFreeUnicodeString(&lpAccountW);
HeapFree(GetProcessHeap(), 0, lpReferencedDomainNameW); heap_free(lpReferencedDomainNameW);
return ret; return ret;
} }
@ -2830,7 +2825,7 @@ BOOL lookup_local_wellknown_name( const LSA_UNICODE_STRING *account_and_domain,
{ {
DWORD len, sidLen = SECURITY_MAX_SID_SIZE; DWORD len, sidLen = SECURITY_MAX_SID_SIZE;
if (!(pSid = HeapAlloc( GetProcessHeap(), 0, sidLen ))) return FALSE; if (!(pSid = heap_alloc( sidLen ))) return FALSE;
if ((ret = CreateWellKnownSid( ACCOUNT_SIDS[i].type, NULL, pSid, &sidLen ))) if ((ret = CreateWellKnownSid( ACCOUNT_SIDS[i].type, NULL, pSid, &sidLen )))
{ {
@ -2862,7 +2857,7 @@ BOOL lookup_local_wellknown_name( const LSA_UNICODE_STRING *account_and_domain,
if (ret) if (ret)
*peUse = ACCOUNT_SIDS[i].name_use; *peUse = ACCOUNT_SIDS[i].name_use;
HeapFree(GetProcessHeap(), 0, pSid); heap_free(pSid);
*handled = TRUE; *handled = TRUE;
return ret; return ret;
} }
@ -2887,7 +2882,7 @@ BOOL lookup_local_user_name( const LSA_UNICODE_STRING *account_and_domain,
/* Let the current Unix user id masquerade as first Windows user account */ /* Let the current Unix user id masquerade as first Windows user account */
nameLen = UNLEN + 1; nameLen = UNLEN + 1;
if (!(userName = HeapAlloc( GetProcessHeap(), 0, nameLen * sizeof(WCHAR) ))) return FALSE; if (!(userName = heap_alloc( nameLen * sizeof(WCHAR) ))) return FALSE;
if (domain.Buffer) if (domain.Buffer)
{ {
@ -2918,7 +2913,7 @@ BOOL lookup_local_user_name( const LSA_UNICODE_STRING *account_and_domain,
} }
} }
HeapFree(GetProcessHeap(), 0, userName); heap_free(userName);
return ret; return ret;
} }
@ -3588,7 +3583,7 @@ static DWORD trustee_name_A_to_W(TRUSTEE_FORM form, char *trustee_nameA, WCHAR *
if (objA) if (objA)
{ {
if (!(objW = HeapAlloc( GetProcessHeap(), 0, sizeof(OBJECTS_AND_NAME_W) ))) if (!(objW = heap_alloc( sizeof(OBJECTS_AND_NAME_W) )))
return ERROR_NOT_ENOUGH_MEMORY; return ERROR_NOT_ENOUGH_MEMORY;
objW->ObjectsPresent = objA->ObjectsPresent; objW->ObjectsPresent = objA->ObjectsPresent;
@ -3616,7 +3611,7 @@ static void free_trustee_name(TRUSTEE_FORM form, WCHAR *trustee_nameW)
switch (form) switch (form)
{ {
case TRUSTEE_IS_NAME: case TRUSTEE_IS_NAME:
HeapFree( GetProcessHeap(), 0, trustee_nameW ); heap_free( trustee_nameW );
break; break;
case TRUSTEE_IS_OBJECTS_AND_NAME: case TRUSTEE_IS_OBJECTS_AND_NAME:
{ {
@ -3624,10 +3619,10 @@ static void free_trustee_name(TRUSTEE_FORM form, WCHAR *trustee_nameW)
if (objW) if (objW)
{ {
HeapFree( GetProcessHeap(), 0, objW->ptstrName ); heap_free( objW->ptstrName );
HeapFree( GetProcessHeap(), 0, objW->InheritedObjectTypeName ); heap_free( objW->InheritedObjectTypeName );
HeapFree( GetProcessHeap(), 0, objW->ObjectTypeName ); heap_free( objW->ObjectTypeName );
HeapFree( GetProcessHeap(), 0, objW ); heap_free( objW );
} }
break; break;
@ -3656,7 +3651,7 @@ DWORD WINAPI SetEntriesInAclA( ULONG count, PEXPLICIT_ACCESSA pEntries,
if (!count && !OldAcl) if (!count && !OldAcl)
return ERROR_SUCCESS; return ERROR_SUCCESS;
pEntriesW = HeapAlloc( GetProcessHeap(), 0, count * sizeof(EXPLICIT_ACCESSW) ); pEntriesW = heap_alloc( count * sizeof(EXPLICIT_ACCESSW) );
if (!pEntriesW) if (!pEntriesW)
return ERROR_NOT_ENOUGH_MEMORY; return ERROR_NOT_ENOUGH_MEMORY;
@ -3692,7 +3687,7 @@ cleanup:
for (free_index = 0; free_index < alloc_index; ++free_index) for (free_index = 0; free_index < alloc_index; ++free_index)
free_trustee_name( pEntriesW[free_index].Trustee.TrusteeForm, pEntriesW[free_index].Trustee.ptstrName ); free_trustee_name( pEntriesW[free_index].Trustee.TrusteeForm, pEntriesW[free_index].Trustee.ptstrName );
HeapFree( GetProcessHeap(), 0, pEntriesW ); heap_free( pEntriesW );
return err; return err;
} }
@ -3717,7 +3712,7 @@ DWORD WINAPI SetEntriesInAclW( ULONG count, PEXPLICIT_ACCESSW pEntries,
return ERROR_SUCCESS; return ERROR_SUCCESS;
/* allocate array of maximum sized sids allowed */ /* allocate array of maximum sized sids allowed */
ppsid = HeapAlloc(GetProcessHeap(), 0, count * (sizeof(SID *) + FIELD_OFFSET(SID, SubAuthority[SID_MAX_SUB_AUTHORITIES]))); ppsid = heap_alloc(count * (sizeof(SID *) + FIELD_OFFSET(SID, SubAuthority[SID_MAX_SUB_AUTHORITIES])));
if (!ppsid) if (!ppsid)
return ERROR_OUTOFMEMORY; return ERROR_OUTOFMEMORY;
@ -3955,7 +3950,7 @@ DWORD WINAPI SetEntriesInAclW( ULONG count, PEXPLICIT_ACCESSW pEntries,
} }
exit: exit:
HeapFree(GetProcessHeap(), 0, ppsid); heap_free(ppsid);
return ret; return ret;
} }
@ -3976,7 +3971,7 @@ DWORD WINAPI SetNamedSecurityInfoA(LPSTR pObjectName,
r = SetNamedSecurityInfoW( wstr, ObjectType, SecurityInfo, psidOwner, r = SetNamedSecurityInfoW( wstr, ObjectType, SecurityInfo, psidOwner,
psidGroup, pDacl, pSacl ); psidGroup, pDacl, pSacl );
HeapFree( GetProcessHeap(), 0, wstr ); heap_free( wstr );
return r; return r;
} }
@ -4599,7 +4594,7 @@ BOOL WINAPI ConvertStringSecurityDescriptorToSecurityDescriptorA(
ret = ConvertStringSecurityDescriptorToSecurityDescriptorW(StringSecurityDescriptorW, ret = ConvertStringSecurityDescriptorToSecurityDescriptorW(StringSecurityDescriptorW,
StringSDRevision, SecurityDescriptor, StringSDRevision, SecurityDescriptor,
SecurityDescriptorSize); SecurityDescriptorSize);
HeapFree(GetProcessHeap(), 0, StringSecurityDescriptorW); heap_free(StringSecurityDescriptorW);
return ret; return ret;
} }
@ -5049,7 +5044,7 @@ BOOL WINAPI ConvertSecurityDescriptorToStringSecurityDescriptorA(PSECURITY_DESCR
int lenA; int lenA;
lenA = WideCharToMultiByte(CP_ACP, 0, wstr, len, NULL, 0, NULL, NULL); lenA = WideCharToMultiByte(CP_ACP, 0, wstr, len, NULL, 0, NULL, NULL);
*OutputString = HeapAlloc(GetProcessHeap(), 0, lenA); *OutputString = heap_alloc(lenA);
WideCharToMultiByte(CP_ACP, 0, wstr, len, *OutputString, lenA, NULL, NULL); WideCharToMultiByte(CP_ACP, 0, wstr, len, *OutputString, lenA, NULL, NULL);
LocalFree(wstr); LocalFree(wstr);
@ -5106,7 +5101,7 @@ BOOL WINAPI ConvertStringSidToSidA(LPCSTR StringSid, PSID* Sid)
{ {
WCHAR *wStringSid = SERV_dup(StringSid); WCHAR *wStringSid = SERV_dup(StringSid);
bret = ConvertStringSidToSidW(wStringSid, Sid); bret = ConvertStringSidToSidW(wStringSid, Sid);
HeapFree(GetProcessHeap(), 0, wStringSid); heap_free(wStringSid);
} }
return bret; return bret;
} }
@ -5197,11 +5192,11 @@ BOOL WINAPI CreatePrivateObjectSecurity(
needed += WINE_SIZE_OF_WORLD_ACCESS_ACL; needed += WINE_SIZE_OF_WORLD_ACCESS_ACL;
needed += WINE_SIZE_OF_WORLD_ACCESS_ACL; needed += WINE_SIZE_OF_WORLD_ACCESS_ACL;
if (!(buffer = HeapAlloc( GetProcessHeap(), 0, needed ))) return FALSE; if (!(buffer = heap_alloc( needed ))) return FALSE;
relative = (SECURITY_DESCRIPTOR_RELATIVE *)buffer; relative = (SECURITY_DESCRIPTOR_RELATIVE *)buffer;
if (!InitializeSecurityDescriptor( relative, SECURITY_DESCRIPTOR_REVISION )) if (!InitializeSecurityDescriptor( relative, SECURITY_DESCRIPTOR_REVISION ))
{ {
HeapFree( GetProcessHeap(), 0, buffer ); heap_free( buffer );
return FALSE; return FALSE;
} }
relative->Control |= SE_SELF_RELATIVE; relative->Control |= SE_SELF_RELATIVE;
@ -5230,7 +5225,7 @@ BOOL WINAPI DestroyPrivateObjectSecurity( PSECURITY_DESCRIPTOR* ObjectDescriptor
{ {
FIXME("%p - stub\n", ObjectDescriptor); FIXME("%p - stub\n", ObjectDescriptor);
HeapFree( GetProcessHeap(), 0, *ObjectDescriptor ); heap_free( *ObjectDescriptor );
return TRUE; return TRUE;
} }
@ -5279,12 +5274,12 @@ BOOL WINAPI CreateProcessAsUserA(
ret = CreateProcessAsUserW(hToken, appW, cmdlnW, lpProcessAttributes, ret = CreateProcessAsUserW(hToken, appW, cmdlnW, lpProcessAttributes,
lpThreadAttributes, bInheritHandles, dwCreationFlags, lpThreadAttributes, bInheritHandles, dwCreationFlags,
lpEnvironment, cwdW, &sinfo, lpProcessInformation); lpEnvironment, cwdW, &sinfo, lpProcessInformation);
HeapFree(GetProcessHeap(), 0, appW); heap_free(appW);
HeapFree(GetProcessHeap(), 0, cmdlnW); heap_free(cmdlnW);
HeapFree(GetProcessHeap(), 0, cwdW); heap_free(cwdW);
HeapFree(GetProcessHeap(), 0, sinfo.lpReserved); heap_free(sinfo.lpReserved);
HeapFree(GetProcessHeap(), 0, sinfo.lpDesktop); heap_free(sinfo.lpDesktop);
HeapFree(GetProcessHeap(), 0, sinfo.lpTitle); heap_free(sinfo.lpTitle);
return ret; return ret;
} }
@ -5573,7 +5568,7 @@ DWORD WINAPI GetNamedSecurityInfoA(LPSTR pObjectName,
r = GetNamedSecurityInfoW( wstr, ObjectType, SecurityInfo, ppsidOwner, r = GetNamedSecurityInfoW( wstr, ObjectType, SecurityInfo, ppsidOwner,
ppsidGroup, ppDacl, ppSacl, ppSecurityDescriptor ); ppsidGroup, ppDacl, ppSacl, ppSecurityDescriptor );
HeapFree( GetProcessHeap(), 0, wstr ); heap_free( wstr );
return r; return r;
} }