[EXPLORER_NEW]

- Prefer HeapAlloc over malloc

svn path=/trunk/; revision=58264
This commit is contained in:
Thomas Faber 2013-02-02 11:14:58 +00:00
parent 7537a1a708
commit 2c829c1ad2
2 changed files with 58 additions and 20 deletions

View file

@ -107,9 +107,9 @@ static int runCmd(LPWSTR cmdline, LPCWSTR dir, BOOL wait, BOOL minimized)
static BOOL ProcessRunKeys(HKEY hkRoot, LPCWSTR szKeyName, BOOL bDelete, static BOOL ProcessRunKeys(HKEY hkRoot, LPCWSTR szKeyName, BOOL bDelete,
BOOL bSynchronous) BOOL bSynchronous)
{ {
HKEY hkWin = NULL, hkRun=NULL; HKEY hkWin = NULL, hkRun = NULL;
LONG res = ERROR_SUCCESS; LONG res = ERROR_SUCCESS;
DWORD i, nMaxCmdLine = 0, nMaxValue = 0; DWORD i, cbMaxCmdLine = 0, cchMaxValue = 0;
WCHAR *szCmdLine = NULL; WCHAR *szCmdLine = NULL;
WCHAR *szValue = NULL; WCHAR *szValue = NULL;
@ -118,7 +118,12 @@ static BOOL ProcessRunKeys(HKEY hkRoot, LPCWSTR szKeyName, BOOL bDelete,
else else
wprintf(L"processing %s entries under HKCU\n", szKeyName); wprintf(L"processing %s entries under HKCU\n", szKeyName);
if ((res = RegOpenKeyExW(hkRoot, L"Software\\Microsoft\\Windows\\CurrentVersion", 0, KEY_READ, &hkWin)) != ERROR_SUCCESS) res = RegOpenKeyExW(hkRoot,
L"Software\\Microsoft\\Windows\\CurrentVersion",
0,
KEY_READ,
&hkWin);
if (res != ERROR_SUCCESS)
{ {
printf("RegOpenKey failed on Software\\Microsoft\\Windows\\CurrentVersion (%ld)\n", printf("RegOpenKey failed on Software\\Microsoft\\Windows\\CurrentVersion (%ld)\n",
res); res);
@ -126,8 +131,12 @@ static BOOL ProcessRunKeys(HKEY hkRoot, LPCWSTR szKeyName, BOOL bDelete,
goto end; goto end;
} }
if ((res = RegOpenKeyExW(hkWin, szKeyName, 0, bDelete?KEY_ALL_ACCESS:KEY_READ, &hkRun))!= res = RegOpenKeyExW(hkWin,
ERROR_SUCCESS) szKeyName,
0,
bDelete ? KEY_ALL_ACCESS : KEY_READ,
&hkRun);
if (res != ERROR_SUCCESS)
{ {
if (res == ERROR_FILE_NOT_FOUND) if (res == ERROR_FILE_NOT_FOUND)
{ {
@ -141,8 +150,19 @@ static BOOL ProcessRunKeys(HKEY hkRoot, LPCWSTR szKeyName, BOOL bDelete,
goto end; goto end;
} }
if ((res = RegQueryInfoKeyW(hkRun, NULL, NULL, NULL, NULL, NULL, NULL, &i, &nMaxValue, res = RegQueryInfoKeyW(hkRun,
&nMaxCmdLine, NULL, NULL)) != ERROR_SUCCESS) NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
&i,
&cchMaxValue,
&cbMaxCmdLine,
NULL,
NULL);
if (res != ERROR_SUCCESS)
{ {
printf("Couldn't query key info (%ld)\n", res); printf("Couldn't query key info (%ld)\n", res);
@ -157,7 +177,10 @@ static BOOL ProcessRunKeys(HKEY hkRoot, LPCWSTR szKeyName, BOOL bDelete,
goto end; goto end;
} }
if ((szCmdLine = malloc(nMaxCmdLine)) == NULL) szCmdLine = HeapAlloc(hProcessHeap,
0,
cbMaxCmdLine);
if (szCmdLine == NULL)
{ {
printf("Couldn't allocate memory for the commands to be executed\n"); printf("Couldn't allocate memory for the commands to be executed\n");
@ -165,24 +188,34 @@ static BOOL ProcessRunKeys(HKEY hkRoot, LPCWSTR szKeyName, BOOL bDelete,
goto end; goto end;
} }
if ((szValue = malloc((++nMaxValue)*sizeof(*szValue))) == NULL) ++cchMaxValue;
szValue = HeapAlloc(hProcessHeap,
0,
cchMaxValue * sizeof(*szValue));
if (szValue == NULL)
{ {
printf("Couldn't allocate memory for the value names\n"); printf("Couldn't allocate memory for the value names\n");
free(szCmdLine);
res = ERROR_NOT_ENOUGH_MEMORY; res = ERROR_NOT_ENOUGH_MEMORY;
goto end; goto end;
} }
while (i > 0) while (i > 0)
{ {
DWORD nValLength = nMaxValue, nDataLength = nMaxCmdLine; DWORD cchValLength = cchMaxValue, cbDataLength = cbMaxCmdLine;
DWORD type; DWORD type;
--i; --i;
if ((res = RegEnumValueW(hkRun, i, szValue, &nValLength, 0, &type, res = RegEnumValueW(hkRun,
(LPBYTE)szCmdLine, &nDataLength)) != ERROR_SUCCESS) i,
szValue,
&cchValLength,
0,
&type,
(PBYTE)szCmdLine,
&cbDataLength);
if (res != ERROR_SUCCESS)
{ {
printf("Couldn't read in value %ld - %ld\n", i, res); printf("Couldn't read in value %ld - %ld\n", i, res);
@ -204,7 +237,8 @@ static BOOL ProcessRunKeys(HKEY hkRoot, LPCWSTR szKeyName, BOOL bDelete,
continue; continue;
} }
if ((res = runCmd(szCmdLine, NULL, bSynchronous, FALSE)) == INVALID_RUNCMD_RETURN) res = runCmd(szCmdLine, NULL, bSynchronous, FALSE);
if (res == INVALID_RUNCMD_RETURN)
{ {
printf("Error running cmd #%ld (%ld)\n", i, GetLastError()); printf("Error running cmd #%ld (%ld)\n", i, GetLastError());
} }
@ -212,11 +246,12 @@ static BOOL ProcessRunKeys(HKEY hkRoot, LPCWSTR szKeyName, BOOL bDelete,
printf("Done processing cmd #%ld\n", i); printf("Done processing cmd #%ld\n", i);
} }
free(szValue);
free(szCmdLine);
res = ERROR_SUCCESS; res = ERROR_SUCCESS;
end: end:
if (szValue != NULL)
HeapFree(hProcessHeap, 0, szValue);
if (szCmdLine != NULL)
HeapFree(hProcessHeap, 0, szCmdLine);
if (hkRun != NULL) if (hkRun != NULL)
RegCloseKey(hkRun); RegCloseKey(hkRun);
if (hkWin != NULL) if (hkWin != NULL)

View file

@ -51,11 +51,12 @@ SysPagerWnd_CreateNotifyItemData(IN OUT PSYS_PAGER_WND_DATA This)
PNOTIFY_ITEM *findNotifyPointer = &This->NotifyItems; PNOTIFY_ITEM *findNotifyPointer = &This->NotifyItems;
PNOTIFY_ITEM notifyItem; PNOTIFY_ITEM notifyItem;
notifyItem = malloc(sizeof(*notifyItem)); notifyItem = HeapAlloc(hProcessHeap,
HEAP_ZERO_MEMORY,
sizeof(*notifyItem));
if (notifyItem == NULL) if (notifyItem == NULL)
return NULL; return NULL;
ZeroMemory(notifyItem, sizeof(*notifyItem));
notifyItem->next = NULL; notifyItem->next = NULL;
while (*findNotifyPointer != NULL) while (*findNotifyPointer != NULL)
@ -248,7 +249,9 @@ SysPagerWnd_RemoveButton(IN OUT PSYS_PAGER_WND_DATA This,
if (!(deleteItem->iconData.dwState & NIS_HIDDEN)) if (!(deleteItem->iconData.dwState & NIS_HIDDEN))
This->VisibleButtonCount--; This->VisibleButtonCount--;
free(deleteItem); HeapFree(hProcessHeap,
0,
deleteItem);
This->ButtonCount--; This->ButtonCount--;
while (updateItem != NULL) while (updateItem != NULL)