Jacek Caban : kernel32: Moved EnumProcesses implementation to kernel32.
Alexandre Julliard
julliard at winehq.org
Wed May 4 13:47:39 CDT 2011
Module: wine
Branch: master
Commit: 1fa36c85bd2e5b76f0ea3a577d4d527221e6c88b
URL: http://source.winehq.org/git/wine.git/?a=commit;h=1fa36c85bd2e5b76f0ea3a577d4d527221e6c88b
Author: Jacek Caban <jacek at codeweavers.com>
Date: Tue May 3 21:08:42 2011 +0000
kernel32: Moved EnumProcesses implementation to kernel32.
---
dlls/kernel32/kernel32.spec | 1 +
dlls/kernel32/process.c | 44 ++++++++++++++++++++++++++++++++++++++
dlls/psapi/psapi.spec | 2 +-
dlls/psapi/psapi_main.c | 49 -------------------------------------------
4 files changed, 46 insertions(+), 50 deletions(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec
index 946bce0..aae17e9 100644
--- a/dlls/kernel32/kernel32.spec
+++ b/dlls/kernel32/kernel32.spec
@@ -770,6 +770,7 @@
@ stdcall K32EmptyWorkingSet(long)
@ stdcall K32GetProcessImageFileNameA(long ptr long)
@ stdcall K32GetProcessImageFileNameW(long ptr long)
+@ stdcall K32EnumProcesses(ptr long ptr)
@ stdcall -i386 -private -register K32Thk1632Epilog() krnl386.exe16.K32Thk1632Epilog
@ stdcall -i386 -private -register K32Thk1632Prolog() krnl386.exe16.K32Thk1632Prolog
@ stdcall LCIDToLocaleName(long ptr long long)
diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c
index d1d6a3b..668230d 100644
--- a/dlls/kernel32/process.c
+++ b/dlls/kernel32/process.c
@@ -3458,6 +3458,50 @@ DWORD WINAPI K32GetProcessImageFileNameW( HANDLE process, LPWSTR file, DWORD siz
}
/***********************************************************************
+ * K32EnumProcesses (KERNEL32.@)
+ */
+BOOL WINAPI K32EnumProcesses(DWORD *lpdwProcessIDs, DWORD cb, DWORD *lpcbUsed)
+{
+ SYSTEM_PROCESS_INFORMATION *spi;
+ ULONG size = 0x4000;
+ void *buf = NULL;
+ NTSTATUS status;
+
+ do {
+ size *= 2;
+ HeapFree(GetProcessHeap(), 0, buf);
+ buf = HeapAlloc(GetProcessHeap(), 0, size);
+ if (!buf)
+ return FALSE;
+
+ status = NtQuerySystemInformation(SystemProcessInformation, buf, size, NULL);
+ } while(status == STATUS_INFO_LENGTH_MISMATCH);
+
+ if (status != STATUS_SUCCESS)
+ {
+ HeapFree(GetProcessHeap(), 0, buf);
+ SetLastError(RtlNtStatusToDosError(status));
+ return FALSE;
+ }
+
+ spi = buf;
+
+ for (*lpcbUsed = 0; cb >= sizeof(DWORD); cb -= sizeof(DWORD))
+ {
+ *lpdwProcessIDs++ = HandleToUlong(spi->UniqueProcessId);
+ *lpcbUsed += sizeof(DWORD);
+
+ if (spi->NextEntryOffset == 0)
+ break;
+
+ spi = (SYSTEM_PROCESS_INFORMATION *)(((PCHAR)spi) + spi->NextEntryOffset);
+ }
+
+ HeapFree(GetProcessHeap(), 0, buf);
+ return TRUE;
+}
+
+/***********************************************************************
* ProcessIdToSessionId (KERNEL32.@)
* This function is available on Terminal Server 4SP4 and Windows 2000
*/
diff --git a/dlls/psapi/psapi.spec b/dlls/psapi/psapi.spec
index 25e39cc..f3c960c 100644
--- a/dlls/psapi/psapi.spec
+++ b/dlls/psapi/psapi.spec
@@ -3,7 +3,7 @@
@ stdcall EnumPageFilesA(ptr ptr)
@ stdcall EnumPageFilesW(ptr ptr)
@ stdcall EnumProcessModules(long ptr long ptr)
-@ stdcall EnumProcesses(ptr long ptr)
+@ stdcall EnumProcesses(ptr long ptr) kernel32.K32EnumProcesses
@ stdcall GetDeviceDriverBaseNameA(ptr ptr long)
@ stdcall GetDeviceDriverBaseNameW(ptr ptr long)
@ stdcall GetDeviceDriverFileNameA(ptr ptr long)
diff --git a/dlls/psapi/psapi_main.c b/dlls/psapi/psapi_main.c
index 07863ea..7e05601 100644
--- a/dlls/psapi/psapi_main.c
+++ b/dlls/psapi/psapi_main.c
@@ -179,55 +179,6 @@ BOOL WINAPI EnumPageFilesW( PENUM_PAGE_FILE_CALLBACKW callback, LPVOID context )
}
/***********************************************************************
- * EnumProcesses (PSAPI.@)
- */
-BOOL WINAPI EnumProcesses(DWORD *lpdwProcessIDs, DWORD cb, DWORD *lpcbUsed)
-{
- SYSTEM_PROCESS_INFORMATION *spi;
- NTSTATUS status;
- PVOID pBuf = NULL;
- ULONG nAlloc = 0x8000;
-
- do {
- if (pBuf != NULL)
- {
- HeapFree(GetProcessHeap(), 0, pBuf);
- nAlloc *= 2;
- }
-
- pBuf = HeapAlloc(GetProcessHeap(), 0, nAlloc);
- if (pBuf == NULL)
- return FALSE;
-
- status = NtQuerySystemInformation(SystemProcessInformation, pBuf,
- nAlloc, NULL);
- } while (status == STATUS_INFO_LENGTH_MISMATCH);
-
- if (status != STATUS_SUCCESS)
- {
- HeapFree(GetProcessHeap(), 0, pBuf);
- SetLastError(RtlNtStatusToDosError(status));
- return FALSE;
- }
-
- spi = pBuf;
-
- for (*lpcbUsed = 0; cb >= sizeof(DWORD); cb -= sizeof(DWORD))
- {
- *lpdwProcessIDs++ = HandleToUlong(spi->UniqueProcessId);
- *lpcbUsed += sizeof(DWORD);
-
- if (spi->NextEntryOffset == 0)
- break;
-
- spi = (SYSTEM_PROCESS_INFORMATION *)(((PCHAR)spi) + spi->NextEntryOffset);
- }
-
- HeapFree(GetProcessHeap(), 0, pBuf);
- return TRUE;
-}
-
-/***********************************************************************
* EnumProcessModules (PSAPI.@)
*
* NOTES
More information about the wine-cvs
mailing list