Commit in reactos/lib/psapi on MAIN
precomp.h+13added 1.1
.cvsignore+11.2 -> 1.3
makefile+3-11.10 -> 1.11
misc/dllmain.c+2-31.4 -> 1.5
    /malloc.c+29-281.4 -> 1.5
    /stubs.c+43-291.5 -> 1.6
    /win32.c+773-8391.10 -> 1.11
+864-900
1 added + 6 modified, total 7 files
1. reformatted the code so human beings can read it
2. enabled precompiled headers

reactos/lib/psapi
precomp.h added at 1.1
diff -N precomp.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ precomp.h	2 Nov 2004 23:42:49 -0000	1.1
@@ -0,0 +1,13 @@
+#include <windows.h>
+#include <psapi.h>
+#include <epsapi.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ddk/ntddk.h>
+#include <napi/teb.h>
+#include <ntos/heap.h>
+#include <ntdll/ldr.h>
+
+#define SetLastErrorByStatus(__S__) \
+ ((void)SetLastError(RtlNtStatusToDosError(__S__)))

reactos/lib/psapi
.cvsignore 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- .cvsignore	28 Jun 2003 23:30:10 -0000	1.2
+++ .cvsignore	2 Nov 2004 23:42:49 -0000	1.3
@@ -6,3 +6,4 @@
 *.o
 *.d
 *.map
+*.gch

reactos/lib/psapi
makefile 1.10 -> 1.11
diff -u -r1.10 -r1.11
--- makefile	29 May 2004 21:24:46 -0000	1.10
+++ makefile	2 Nov 2004 23:42:49 -0000	1.11
@@ -1,4 +1,4 @@
-# $Id: makefile,v 1.10 2004/05/29 21:24:46 hbirr Exp $
+# $Id: makefile,v 1.11 2004/11/02 23:42:49 weiden Exp $
 
 PATH_TO_TOP = ../..
 
@@ -17,6 +17,8 @@
 
 TARGET_BASE = $(TARGET_BASE_LIB_PSAPI)
 
+TARGET_PCH = precomp.h
+
 TARGET_OBJECTS = \
 	misc/dllmain.o \
 	misc/malloc.o \

reactos/lib/psapi/misc
dllmain.c 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- dllmain.c	31 Aug 2002 17:11:24 -0000	1.4
+++ dllmain.c	2 Nov 2004 23:42:49 -0000	1.5
@@ -1,4 +1,4 @@
-/* $Id: dllmain.c,v 1.4 2002/08/31 17:11:24 hyperion Exp $
+/* $Id: dllmain.c,v 1.5 2004/11/02 23:42:49 weiden Exp $
 */
 /*
  * COPYRIGHT:   None
@@ -11,8 +11,7 @@
  *              28/11/2001: Created (Emanuele Aliberti <eal@users.sf.net>)
  *              30/08/2002: Minimal tweak (KJK::Hyperion <noog@libero.it>)
  */
-#include <windows.h>
-#include <ntdll/ldr.h>
+#include "precomp.h"
 
 BOOLEAN STDCALL DllMain
 (

reactos/lib/psapi/misc
malloc.c 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- malloc.c	2 Apr 2003 22:09:57 -0000	1.4
+++ malloc.c	2 Nov 2004 23:42:49 -0000	1.5
@@ -1,4 +1,4 @@
-/* $Id: malloc.c,v 1.4 2003/04/02 22:09:57 hyperion Exp $
+/* $Id: malloc.c,v 1.5 2004/11/02 23:42:49 weiden Exp $
  */
 /*
  * COPYRIGHT:   None
@@ -13,39 +13,40 @@
  *                          for better reusability
  */
 
-#include <ddk/ntddk.h>
-#include <napi/teb.h>
-#include <ntos/heap.h>
-
-PVOID STDCALL MemAlloc
-(
- IN HANDLE Heap,
- IN PVOID Ptr,
- IN ULONG Size
-)
+#include "precomp.h"
+
+PVOID
+STDCALL
+MemAlloc(IN HANDLE Heap,
+         IN PVOID Ptr,
+         IN ULONG Size)
 {
- PVOID pBuf = NULL;
+  PVOID pBuf = NULL;
 
- if(Size == 0 && Ptr == NULL)
-  return (NULL);
+  if(Size == 0 && Ptr == NULL)
+  {
+    return NULL;
+  }
   
- if(Heap == NULL)
-  Heap = NtCurrentPeb()->ProcessHeap;
+  if(Heap == NULL)
+  {
+    Heap = NtCurrentPeb()->ProcessHeap;
+  }
  
- if(Size > 0)
- {
-  if(Ptr == NULL)
-   /* malloc */
-   pBuf = RtlAllocateHeap(Heap, 0, Size);
+  if(Size > 0)
+  {
+    if(Ptr == NULL)
+      /* malloc */
+      pBuf = RtlAllocateHeap(Heap, 0, Size);
+    else
+      /* realloc */
+      pBuf = RtlReAllocateHeap(Heap, 0, Ptr, Size);
+  }
   else
-   /* realloc */
-   pBuf = RtlReAllocateHeap(Heap, 0, Ptr, Size);
- }
- else
-  /* free */
-  RtlFreeHeap(Heap, 0, Ptr);
+    /* free */
+    RtlFreeHeap(Heap, 0, Ptr);
 
- return pBuf;
+  return pBuf;
 }
 
 void *PsaiMalloc(SIZE_T size)

reactos/lib/psapi/misc
stubs.c 1.5 -> 1.6
diff -u -r1.5 -r1.6
--- stubs.c	31 Oct 2004 01:23:05 -0000	1.5
+++ stubs.c	2 Nov 2004 23:42:49 -0000	1.6
@@ -1,45 +1,59 @@
-/* $Id: stubs.c,v 1.5 2004/10/31 01:23:05 weiden Exp $ */
-#include <windows.h>
-#include <psapi.h>
+/* $Id: stubs.c,v 1.6 2004/11/02 23:42:49 weiden Exp $ */
+#include "precomp.h"
 
 #if 0
-BOOL STDCALL EnumPageFiles(
-  PENUM_PAGE_CALLBACKW pCallbackRoutine,
-  LPVOID lpContext
-)
+/*
+ * @unimplemented
+ */
+BOOL
+STDCALL
+EnumPageFiles(PENUM_PAGE_CALLBACKW pCallbackRoutine,
+              LPVOID lpContext)
 {
- SetLastError(ERROR_INVALID_FUNCTION);
- return FALSE;
+  SetLastError(ERROR_INVALID_FUNCTION);
+  return FALSE;
 }
 
-BOOL STDCALL GetPerformanceInfo(
-  PPERFORMANCE_INFORMATION pPerformanceInformation, 
-  DWORD cb 
 
-)
+/*
+ * @unimplemented
+ */
+BOOL
+STDCALL
+GetPerformanceInfo(PPERFORMANCE_INFORMATION pPerformanceInformation,
+                   DWORD cb)
 {
- SetLastError(ERROR_INVALID_FUNCTION);
- return FALSE;
+  SetLastError(ERROR_INVALID_FUNCTION);
+  return FALSE;
 }
 #endif
-BOOL STDCALL GetProcessMemoryInfo(
-  HANDLE Process,                          // handle to process
-  PPROCESS_MEMORY_COUNTERS ppsmemCounters, // buffer
-  DWORD cb                                 // size of buffer
-)
+
+
+/*
+ * @unimplemented
+ */
+BOOL
+STDCALL
+GetProcessMemoryInfo(HANDLE Process,
+                     PPROCESS_MEMORY_COUNTERS ppsmemCounters,
+                     DWORD cb)
 {
- SetLastError(ERROR_INVALID_FUNCTION);
- return FALSE;
+  SetLastError(ERROR_INVALID_FUNCTION);
+  return FALSE;
 }
 
-BOOL STDCALL QueryWorkingSet(
-  HANDLE hProcess,  // handle to process
-  PVOID pv,         // information buffer
-  DWORD cb          // size of buffer
-)
+
+/*
+ * @unimplemented
+ */
+BOOL
+STDCALL
+QueryWorkingSet(HANDLE hProcess,
+                PVOID pv,
+                DWORD cb)
 {
- SetLastError(ERROR_INVALID_FUNCTION);
- return FALSE;
+  SetLastError(ERROR_INVALID_FUNCTION);
+  return FALSE;
 }
 
 /* EOF */

reactos/lib/psapi/misc
win32.c 1.10 -> 1.11
diff -u -r1.10 -r1.11
--- win32.c	31 Oct 2004 01:23:05 -0000	1.10
+++ win32.c	2 Nov 2004 23:42:49 -0000	1.11
@@ -1,4 +1,4 @@
-/* $Id: win32.c,v 1.10 2004/10/31 01:23:05 weiden Exp $
+/* $Id: win32.c,v 1.11 2004/11/02 23:42:49 weiden Exp $
  */
 /*
  * COPYRIGHT:   See COPYING in the top level directory
@@ -11,941 +11,871 @@
  *              10/06/2002: Created
  */
 
-#include <windows.h>
-#include <psapi.h>
-#include <stddef.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ddk/ntddk.h>
-#include <epsapi.h>
-
-/* EmptyWorkingSet */
-BOOL STDCALL EmptyWorkingSet(HANDLE hProcess)
-{
- NTSTATUS nErrCode;
- QUOTA_LIMITS qlProcessQuota;
-
- /* query the working set */
- nErrCode = NtQueryInformationProcess
- (
-  hProcess,
-  ProcessQuotaLimits,
-  &qlProcessQuota,
-  sizeof(qlProcessQuota),
-  NULL
- );
-
- /* failure */
- if(!NT_SUCCESS(nErrCode))
-  goto fail;
-
- /* empty the working set */
- qlProcessQuota.MinimumWorkingSetSize = -1;
- qlProcessQuota.MaximumWorkingSetSize = -1;
-
- /* set the working set */
- nErrCode = NtSetInformationProcess
- (
-  hProcess,
-  ProcessQuotaLimits,
-  &qlProcessQuota,
-  sizeof(qlProcessQuota)
- );
-
- /* success */
- if(NT_SUCCESS(nErrCode))
-  return (TRUE);
-
-fail:
- /* failure */
- SetLastError(RtlNtStatusToDosError(nErrCode));
- return (FALSE);
-}
+#include "precomp.h"
+
+/* INTERNAL *******************************************************************/
 
-/* EnumDeviceDrivers */
-/* callback context */
 typedef struct _ENUM_DEVICE_DRIVERS_CONTEXT
 {
- LPVOID *lpImageBase;
- DWORD nCount;
+  LPVOID *lpImageBase;
+  DWORD nCount;
 } ENUM_DEVICE_DRIVERS_CONTEXT, *PENUM_DEVICE_DRIVERS_CONTEXT;
 
-/* callback routine */
-NTSTATUS STDCALL EnumDeviceDriversCallback
-(
- IN PSYSTEM_MODULE_INFORMATION_ENTRY CurrentModule,
- IN OUT PVOID CallbackContext
-)
-{
- register PENUM_DEVICE_DRIVERS_CONTEXT peddcContext =
-  (PENUM_DEVICE_DRIVERS_CONTEXT)CallbackContext;
-
- /* no more buffer space */
- if(peddcContext->nCount == 0)
-  return STATUS_INFO_LENGTH_MISMATCH;
-
- /* return current module */
- *(peddcContext->lpImageBase) = CurrentModule->Base;
-
- /* go to next array slot */
- (peddcContext->lpImageBase) ++;
- (peddcContext->nCount) --;
-
- return STATUS_SUCCESS;
-}
-
-/* exported interface */
-BOOL STDCALL EnumDeviceDrivers
-(
- LPVOID *lpImageBase,
- DWORD cb,
- LPDWORD lpcbNeeded
-)
-{
- register NTSTATUS nErrCode;
- ENUM_DEVICE_DRIVERS_CONTEXT eddcContext = {lpImageBase, cb / sizeof(PVOID)};
-
- cb /= sizeof(PVOID);
-
- /* do nothing if the buffer is empty */
- if(cb == 0 || lpImageBase == NULL)
- {
-  *lpcbNeeded = 0;
-  return (TRUE);
- }
-
- /* enumerate the system modules */
- nErrCode = PsaEnumerateSystemModules(&EnumDeviceDriversCallback, &eddcContext);
-
- /* return the count of bytes returned */
- *lpcbNeeded = (cb - eddcContext.nCount) * sizeof(PVOID);
-
- /* success */
- if(NT_SUCCESS(nErrCode) || nErrCode == STATUS_INFO_LENGTH_MISMATCH)
-  return (TRUE);
- else
- {
-  /* failure */
-  SetLastError(RtlNtStatusToDosError(nErrCode));
-  return (FALSE);
- }
+NTSTATUS STDCALL
+EnumDeviceDriversCallback(IN PSYSTEM_MODULE_INFORMATION_ENTRY CurrentModule,
+                          IN OUT PVOID CallbackContext)
+{
+  PENUM_DEVICE_DRIVERS_CONTEXT Context = (PENUM_DEVICE_DRIVERS_CONTEXT)CallbackContext;
+
+  /* no more buffer space */
+  if(Context->nCount == 0)
+  {
+    return STATUS_INFO_LENGTH_MISMATCH;
+  }
+
+  /* return current module */
+  *Context->lpImageBase = CurrentModule->Base;
+
+  /* go to next array slot */
+  Context->lpImageBase++;
+  Context->nCount--;
+
+  return STATUS_SUCCESS;
 }
 
-/* EnumProcesses */
-/* callback context */
+
 typedef struct _ENUM_PROCESSES_CONTEXT
 {
- DWORD *lpidProcess;
- DWORD nCount;
+  DWORD *lpidProcess;
+  DWORD nCount;
 } ENUM_PROCESSES_CONTEXT, *PENUM_PROCESSES_CONTEXT;
 
-/* callback routine */
-NTSTATUS STDCALL EnumProcessesCallback
-(
- IN PSYSTEM_PROCESSES CurrentProcess,
- IN OUT PVOID CallbackContext
-)
-{
- register PENUM_PROCESSES_CONTEXT pepcContext =
-  (PENUM_PROCESSES_CONTEXT)CallbackContext;
-
- /* no more buffer space */
- if(pepcContext->nCount == 0)
-  return STATUS_INFO_LENGTH_MISMATCH;
-
- /* return current process */
- *(pepcContext->lpidProcess) = CurrentProcess->ProcessId;
-
- /* go to next array slot */
- (pepcContext->lpidProcess) ++;
- (pepcContext->nCount) --;
-
- return STATUS_SUCCESS;
-}
-
-/* exported interface */
-/*!
- @brief Enumerate the process identifiers of the currently active processes
-
- @param lpidProcess Array that receives the list of process identifiers
- @param cb          Size of the @p lpidProcess array, in bytes
- @param lpcbNeeded  Number of bytes returned in the @p lpidProcess array
-
- @return [standard]
- */
-BOOL STDCALL EnumProcesses
-(
- DWORD *lpidProcess,
- DWORD cb,
- LPDWORD lpcbNeeded
-)
-{
- register NTSTATUS nErrCode;
- ENUM_PROCESSES_CONTEXT epcContext = {lpidProcess, cb / sizeof(DWORD)};
-
- cb /= sizeof(DWORD);
-
- /* do nothing if the buffer is empty */
- if(cb == 0 || lpidProcess == NULL)
- {
-  *lpcbNeeded = 0;
-  return (TRUE);
- }
-
- /* enumerate the process ids */
- nErrCode = PsaEnumerateProcesses
- (
-  &EnumProcessesCallback,
-  &epcContext
- );
-
- *lpcbNeeded = (cb - epcContext.nCount) * sizeof(DWORD);
-
- /* success */
- if(NT_SUCCESS(nErrCode) || nErrCode == STATUS_INFO_LENGTH_MISMATCH)
-  return (TRUE);
- else
- {
-  /* failure */
-  SetLastError(RtlNtStatusToDosError(nErrCode));
-  return (FALSE);
- }
+NTSTATUS STDCALL
+EnumProcessesCallback(IN PSYSTEM_PROCESSES CurrentProcess,
+                      IN OUT PVOID CallbackContext)
+{
+  PENUM_PROCESSES_CONTEXT Context = (PENUM_PROCESSES_CONTEXT)CallbackContext;
+
+  /* no more buffer space */
+  if(Context->nCount == 0)
+  {
+    return STATUS_INFO_LENGTH_MISMATCH;
+  }
+
+  /* return current process */
+  *Context->lpidProcess = CurrentProcess->ProcessId;
+
+  /* go to next array slot */
+  Context->lpidProcess++;
+  Context->nCount--;
+
+  return STATUS_SUCCESS;
 }
 
-/* EnumProcessModules */
-/* callback context */
+
 typedef struct _ENUM_PROCESS_MODULES_CONTEXT
 {
- HMODULE *lphModule;
- DWORD nCount;
+  HMODULE *lphModule;
+  DWORD nCount;
 } ENUM_PROCESS_MODULES_CONTEXT, *PENUM_PROCESS_MODULES_CONTEXT;
 
-/* callback routine */
-NTSTATUS STDCALL EnumProcessModulesCallback
-(
- IN HANDLE ProcessHandle,
- IN PLDR_MODULE CurrentModule,
- IN OUT PVOID CallbackContext
-)
-{
- register PENUM_PROCESS_MODULES_CONTEXT pepmcContext =
-  (PENUM_PROCESS_MODULES_CONTEXT)CallbackContext;
-
- /* no more buffer space */
- if(pepmcContext->nCount == 0)
-  return STATUS_INFO_LENGTH_MISMATCH;
-
- /* return current process */
- *(pepmcContext->lphModule) = CurrentModule->BaseAddress;
-
- /* go to next array slot */
- (pepmcContext->lphModule) ++;
- (pepmcContext->nCount) --;
-
- return STATUS_SUCCESS;
-}
-
-/* exported interface */
-BOOL STDCALL EnumProcessModules(
-  HANDLE hProcess,
-  HMODULE *lphModule,
-  DWORD cb,
-  LPDWORD lpcbNeeded
-)
-{
- register NTSTATUS nErrCode;
- ENUM_PROCESS_MODULES_CONTEXT epmcContext = {lphModule, cb / sizeof(HMODULE)};
-
- cb /= sizeof(DWORD);
-
- /* do nothing if the buffer is empty */
- if(cb == 0 || lphModule == NULL)
- {
-  *lpcbNeeded = 0;
-  return (TRUE);
- }
-
- /* enumerate the process modules */
- nErrCode = PsaEnumerateProcessModules
- (
-  hProcess,
-  &EnumProcessModulesCallback,
-  &epmcContext
- );
-
- *lpcbNeeded = (cb - epmcContext.nCount) * sizeof(DWORD);
-
- /* success */
- if(NT_SUCCESS(nErrCode) || nErrCode == STATUS_INFO_LENGTH_MISMATCH)
-  return (TRUE);
- else
- {
-  /* failure */
-  SetLastError(RtlNtStatusToDosError(nErrCode));
-  return (FALSE);
- }
+NTSTATUS STDCALL
+EnumProcessModulesCallback(IN HANDLE ProcessHandle,
+                           IN PLDR_MODULE CurrentModule,
+                           IN OUT PVOID CallbackContext)
+{
+  PENUM_PROCESS_MODULES_CONTEXT Context = (PENUM_PROCESS_MODULES_CONTEXT)CallbackContext;
+
+  /* no more buffer space */
+  if(Context->nCount == 0)
+  {
+    return STATUS_INFO_LENGTH_MISMATCH;
+  }
+
+  /* return current process */
+  *Context->lphModule = CurrentModule->BaseAddress;
+
+  /* go to next array slot */
+  Context->lphModule++;
+  Context->nCount--;
+
+  return STATUS_SUCCESS;
 }
 
-/* GetDeviceDriverBase/FileName */
-/* common callback context */
+
 typedef struct _GET_DEVICE_DRIVER_NAME_CONTEXT
 {
- LPVOID ImageBase;
- struct
- {
-  ULONG bFullName:sizeof(ULONG) * 8 / 2;
-  ULONG bUnicode:sizeof(ULONG) * 8 / 2;
- };
- DWORD nSize;
- union
- {
-  LPVOID lpName;
-  LPSTR lpAnsiName;
-  LPWSTR lpUnicodeName;
- };
+  LPVOID ImageBase;
+  struct
+  {
+    ULONG bFullName : sizeof(ULONG) * 8 / 2;
+    ULONG bUnicode : sizeof(ULONG) * 8 / 2;
+  };
+  DWORD nSize;
+  union
+  {
+    LPVOID lpName;
+    LPSTR lpAnsiName;
+    LPWSTR lpUnicodeName;
+  };
 } GET_DEVICE_DRIVER_NAME_CONTEXT, *PGET_DEVICE_DRIVER_NAME_CONTEXT;
 
-/* common callback routine */
-NTSTATUS STDCALL GetDeviceDriverNameCallback
-(
- IN PSYSTEM_MODULE_INFORMATION_ENTRY CurrentModule,
- IN OUT PVOID CallbackContext
-)
-{
- register PGET_DEVICE_DRIVER_NAME_CONTEXT pgddncContext =
-  (PGET_DEVICE_DRIVER_NAME_CONTEXT) CallbackContext;
-
- /* module found */
- if(pgddncContext->ImageBase == CurrentModule->Base)
- {
-  register PCHAR pcModuleName;
-  register ULONG l;
-
-  /* get the full name or just the filename part */
-  if(pgddncContext->bFullName)
-   pcModuleName = &CurrentModule->ImageName[0];
-  else
-   pcModuleName = &CurrentModule->ImageName[CurrentModule->PathLength];
-
-  /* get the length of the name */
-  l = strlen(pcModuleName);
+NTSTATUS STDCALL
+GetDeviceDriverNameCallback(IN PSYSTEM_MODULE_INFORMATION_ENTRY CurrentModule,
+                            IN OUT PVOID CallbackContext)
+{
+  PGET_DEVICE_DRIVER_NAME_CONTEXT Context = (PGET_DEVICE_DRIVER_NAME_CONTEXT)CallbackContext;
 
-  /* if user buffer smaller than the name */
-  if(pgddncContext->nSize <= l)
-   /* use the user buffer's length */
-   l = pgddncContext->nSize;
-  /* if user buffer larger than the name */
-  else
+  /* module found */
+  if(Context->ImageBase == CurrentModule->Base)
   {
-   /* enough space for the null terminator */
-   l ++;
-   pgddncContext->nSize = l;
-  }
+    PCHAR pcModuleName;
+    ULONG l;
 
-  /* copy the string */
-  if(pgddncContext->bUnicode)
-  {
-   /* Unicode: convert and copy */
-   ANSI_STRING strAnsi = {l, l, pcModuleName};
-   UNICODE_STRING wstrUnicode =
-   {
-     0,
-     l * sizeof(WCHAR),
-     pgddncContext->lpUnicodeName
-   };
-   /* driver names should always be in language-neutral ASCII, so we don't
-      bother calling AreFileApisANSI() */
-   RtlAnsiStringToUnicodeString(&wstrUnicode, &strAnsi, FALSE);
-  }
-  else
-   /* ANSI/OEM: direct copy */
-   memcpy(pgddncContext->lpAnsiName, pcModuleName, l);
+    /* get the full name or just the filename part */
+    if(Context->bFullName)
+      pcModuleName = &CurrentModule->ImageName[0];
+    else
+      pcModuleName = &CurrentModule->ImageName[CurrentModule->PathLength];
 
-  /* terminate the enumeration */
-  return STATUS_NO_MORE_FILES;
- }
- /* continue searching */
- else
-  return STATUS_SUCCESS;
-}
+    /* get the length of the name */
+    l = strlen(pcModuleName);
 
-/* common internal implementation */
-DWORD FASTCALL internalGetDeviceDriverName(
-  BOOLEAN bUnicode,
-  BOOLEAN bFullName,
-  LPVOID ImageBase,
-  LPVOID lpName,
-  DWORD nSize
-)
-{
- register NTSTATUS nErrCode;
- GET_DEVICE_DRIVER_NAME_CONTEXT gddncContext =
- {
-  ImageBase,
-  { bFullName, bUnicode },
-  nSize,
-  { lpName }
- };
+    if(Context->nSize <= l)
+    {
+      /* use the user buffer's length */
+      l = Context->nSize;
+    }
+    else
+    {
+      /* enough space for the null terminator */
+      Context->nSize = ++l;
+    }
 
- /* empty buffer */
- if(lpName == NULL || nSize == 0)
-  return 0;
+    /* copy the string */
+    if(Context->bUnicode)
+    {
+      ANSI_STRING AnsiString;
+      UNICODE_STRING UnicodeString;
 
- /* invalid image base */
- if(ImageBase == NULL)
- {
-  SetLastError(ERROR_INVALID_HANDLE);
-  return 0;
- }
+      UnicodeString.Length = 0;
+      UnicodeString.MaximumLength = l * sizeof(WCHAR);
+      UnicodeString.Buffer = Context->lpUnicodeName;
+
+      RtlInitAnsiString(&AnsiString, pcModuleName);
+      /* driver names should always be in language-neutral ASCII, so we don't
+         bother calling AreFileApisANSI() */
+      RtlAnsiStringToUnicodeString(&UnicodeString, &AnsiString, FALSE);
+    }
+    else
+    {
+      memcpy(Context->lpAnsiName, pcModuleName, l);
+    }
 
- /* start the enumeration */
- nErrCode = PsaEnumerateSystemModules
- (
-  &GetDeviceDriverNameCallback,
-  &gddncContext
- );
-
- if(nErrCode == STATUS_NO_MORE_FILES)
-  /* module was found, return string size */
-  return gddncContext.nSize;
- else
- {
-  if(NT_SUCCESS(nErrCode))
-   /* module was not found */
-   SetLastError(ERROR_INVALID_HANDLE);
+    /* terminate the enumeration */
+    return STATUS_NO_MORE_FILES;
+  }
   else
-   /* an error occurred */
-   SetLastError(RtlNtStatusToDosError(nErrCode));
-
-  /* failure */
-  return 0;
- }
+  {
+    /* continue searching */
+    return STATUS_SUCCESS;
+  }
 }
 
-/* exported interfaces */
-/*
- NOTES:
-  - nSize is not, as stated by Microsoft's documentation, the byte size, but the
-    count of characters in the buffer
-  - the return value is the count of characters copied into the buffer
-  - the functions don't attempt to null-terminate the string
- */
-DWORD STDCALL GetDeviceDriverBaseNameA(
-  LPVOID ImageBase,
-  LPSTR lpBaseName,
-  DWORD nSize
-)
-{
- return internalGetDeviceDriverName(FALSE, FALSE, ImageBase, lpBaseName, nSize);
-}
 
-DWORD STDCALL GetDeviceDriverFileNameA(
-  LPVOID ImageBase,
-  LPSTR lpFilename,
-  DWORD nSize
-)
+static DWORD
+InternalGetDeviceDriverName(BOOLEAN bUnicode,
+                            BOOLEAN bFullName,
+                            LPVOID ImageBase,
+                            LPVOID lpName,
+                            DWORD nSize)
 {
- return internalGetDeviceDriverName(FALSE, TRUE, ImageBase, lpFilename, nSize);
-}
+  GET_DEVICE_DRIVER_NAME_CONTEXT Context;
+  NTSTATUS Status;
 
-DWORD STDCALL GetDeviceDriverBaseNameW(
-  LPVOID ImageBase,
-  LPWSTR lpBaseName,
-  DWORD nSize
-)
-{
- return internalGetDeviceDriverName(TRUE, FALSE, ImageBase, lpBaseName, nSize);
-}
+  if(lpName == NULL || nSize == 0)
+  {
+    return 0;
+  }
 
-DWORD STDCALL GetDeviceDriverFileNameW(
-  LPVOID ImageBase,
-  LPWSTR lpFilename,
-  DWORD nSize
-)
-{
- return internalGetDeviceDriverName(TRUE, TRUE, ImageBase, lpFilename, nSize);
-}
+  if(ImageBase == NULL)
+  {
+    SetLastError(ERROR_INVALID_HANDLE);
+    return 0;
+  }
 
-/* GetMappedFileName */
-/* common internal implementation */
-DWORD FASTCALL internalGetMappedFileName(
-  BOOLEAN bUnicode,
-  HANDLE hProcess,    
-  LPVOID lpv,         
-  LPVOID lpName,   
-  DWORD nSize         
-)
-{
- register NTSTATUS nErrCode;
- register ULONG nBufSize;
- PMEMORY_SECTION_NAME pmsnName;
+  Context.ImageBase = ImageBase;
+  Context.bFullName = bFullName;
+  Context.bUnicode = bUnicode;
+  Context.nSize = nSize;
+  Context.lpName = lpName;
 
- /* empty buffer */
- if(nSize == 0 || (LPSTR)lpName == NULL)
-  return 0;
+  /* start the enumeration */
+  Status = PsaEnumerateSystemModules(GetDeviceDriverNameCallback, &Context);
 
- if(nSize > (0xFFFF / sizeof(WCHAR)))
-  /* if the user buffer contains more characters than would fit in an
-     UNICODE_STRING, limit the buffer size. RATIONALE: we don't limit buffer
-     size elsewhere because here superfluous buffer size will mean a larger
-     temporary buffer */
-  nBufSize = 0xFFFF / sizeof(WCHAR);
- else
-  nBufSize = nSize * sizeof(WCHAR);
- 
- /* allocate the memory */
- pmsnName = PsaiMalloc(nBufSize + offsetof(MEMORY_SECTION_NAME, NameBuffer));
- 
- if(pmsnName == NULL)
- {
-  /* failure */
-  SetLastError(ERROR_OUTOFMEMORY);
+  if(Status == STATUS_NO_MORE_FILES)
+  {
+    /* module was found, return string size */
+    return Context.nSize;
+  }
+  else if(NT_SUCCESS(Status))
+  {
+    /* module was not found */
+    SetLastError(ERROR_INVALID_HANDLE);
+  }
+  else
+  {
+    /* an error occurred */
+    SetLastErrorByStatus(Status);
+  }
   return 0;
- }
+}
 
- /* initialize the destination buffer */
- pmsnName->SectionFileName.Length = 0;
- pmsnName->SectionFileName.Length = nBufSize;
 
-#if 0
- __try
- {
-#endif
-  /* query the name */
-  nErrCode = NtQueryVirtualMemory
-  (
-   hProcess,
-   lpv,
-   MemorySectionName,
-   pmsnName,
-   nBufSize,
-   NULL
-  );
-  
-  if(!NT_SUCCESS(nErrCode))
+static DWORD
+InternalGetMappedFileName(BOOLEAN bUnicode,
+                          HANDLE hProcess,
+                          LPVOID lpv,
+                          LPVOID lpName,
+                          DWORD nSize)
+{
+  PMEMORY_SECTION_NAME pmsnName;
+  ULONG nBufSize;
+  NTSTATUS Status;
+
+  if(nSize == 0 || lpName == NULL)
   {
-   /* failure */
-   SetLastError(RtlNtStatusToDosError(nErrCode));
-#if 0
-#else
-   /* free the buffer */
-   PsaiFree(pmsnName);
-#endif
-   return 0;
+    return 0;
   }
-  
-  /* copy the name */
-  if(bUnicode)
+
+  if(nSize > (0xFFFF / sizeof(WCHAR)))
   {
-   /* destination is an Unicode string: direct copy */
-   memcpy
-   (
-    (LPWSTR)lpName,
-    pmsnName->NameBuffer,
-    pmsnName->SectionFileName.Length
-   );
-   
-#if 0
-#else
-   /* free the buffer */
-   PsaiFree(pmsnName);
-#endif
-   
-   if(pmsnName->SectionFileName.Length < nSize)
-   {
-    /* null-terminate the string */
-    ((LPWSTR)lpName)[pmsnName->SectionFileName.Length] = 0;
-    return pmsnName->SectionFileName.Length + 1;
-   }
-   
-   return pmsnName->SectionFileName.Length;
+    /* if the user buffer contains more characters than would fit in an
+       UNICODE_STRING, limit the buffer size. RATIONALE: we don't limit buffer
+       size elsewhere because here superfluous buffer size will mean a larger
+       temporary buffer */
+    nBufSize = 0xFFFF / sizeof(WCHAR);
   }
   else
   {
-   ANSI_STRING strAnsi = {0, nSize, (LPSTR)lpName};
+    nBufSize = nSize * sizeof(WCHAR);
+  }
 
-   if(AreFileApisANSI())
-    /* destination is an ANSI string: convert and copy */
-    RtlUnicodeStringToAnsiString(&strAnsi, &pmsnName->SectionFileName, FALSE);
-   else
-    /* destination is an OEM string: convert and copy */
-    RtlUnicodeStringToOemString(&strAnsi, &pmsnName->SectionFileName, FALSE);
+  /* allocate the memory */
+  pmsnName = PsaiMalloc(nBufSize + offsetof(MEMORY_SECTION_NAME, NameBuffer));
+
+  if(pmsnName == NULL)
+  {
+    SetLastError(ERROR_OUTOFMEMORY);
+    return 0;
+  }
+
+   /* initialize the destination buffer */
+   pmsnName->SectionFileName.Length = 0;
+   pmsnName->SectionFileName.Length = nBufSize;
 
 #if 0
-#else
-   /* free the buffer */
-   PsaiFree(pmsnName);
+   __try
+   {
 #endif
+   /* query the name */
+   Status = NtQueryVirtualMemory(hProcess,
+                                 lpv,
+                                 MemorySectionName,
+                                 pmsnName,
+                                 nBufSize,
+                                 NULL);
+   if(!NT_SUCCESS(Status))
+   {
+     PsaiFree(pmsnName);
+     SetLastErrorByStatus(Status);
+     return 0;
+   }
 
-   if(strAnsi.Length < nSize)
+   if(bUnicode)
    {
-    /* null-terminate the string */
-    ((LPSTR)lpName)[strAnsi.Length] = 0;
-    return strAnsi.Length + 1;
+     /* destination is an Unicode string: direct copy */
+     memcpy((LPWSTR)lpName, pmsnName->NameBuffer, pmsnName->SectionFileName.Length);
+
+     PsaiFree(pmsnName);
+
+     if(pmsnName->SectionFileName.Length < nSize)
+     {
+       /* null-terminate the string */
+       ((LPWSTR)lpName)[pmsnName->SectionFileName.Length] = 0;
+       return pmsnName->SectionFileName.Length + 1;
+     }
+
+     return pmsnName->SectionFileName.Length;
    }
+   else
+   {
+     ANSI_STRING AnsiString;
 
-   return strAnsi.Length;
-  }
+     AnsiString.Length = 0;
+     AnsiString.MaximumLength = nSize;
+     AnsiString.Buffer = (LPSTR)lpName;
+
+     if(AreFileApisANSI())
+       RtlUnicodeStringToAnsiString(&AnsiString, &pmsnName->SectionFileName, FALSE);
+     else
+       RtlUnicodeStringToOemString(&AnsiString, &pmsnName->SectionFileName, FALSE);
+
+     PsaiFree(pmsnName);
+
+     if(AnsiString.Length < nSize)
+     {
+       /* null-terminate the string */
+       ((LPSTR)lpName)[AnsiString.Length] = 0;
+       return AnsiString.Length + 1;
+     }
+
+     return AnsiString.Length;
+   }
 
 #if 0
- }
- __finally
- {
-  PsaiFree(pmsnName);
- }
+   }
+   __finally
+   {
+     PsaiFree(pmsnName);
+   }
 #endif
 }
 
-/* exported interfaces */
-DWORD STDCALL GetMappedFileNameA(
-  HANDLE hProcess,    
-  LPVOID lpv,         
-  LPSTR lpFilename,   
-  DWORD nSize         
-)
-{
- return internalGetMappedFileName(FALSE, hProcess, lpv, lpFilename, nSize);
-}
 
-DWORD STDCALL GetMappedFileNameW(
-  HANDLE hProcess,    
-  LPVOID lpv,         
-  LPWSTR lpFilename,  
-  DWORD nSize         
-)
-{
- return internalGetMappedFileName(TRUE, hProcess, lpv, lpFilename, nSize);
-}
-
-/* GetModuleInformation */
-/* common callback context */
 typedef struct _GET_MODULE_INFORMATION_FLAGS
 {
- ULONG bWantName:sizeof(ULONG) * 8 / 4;
- ULONG bUnicode:sizeof(ULONG) * 8 / 4;
- ULONG bFullName:sizeof(ULONG) * 8 / 4;
+  ULONG bWantName : sizeof(ULONG) * 8 / 4;
+  ULONG bUnicode : sizeof(ULONG) * 8 / 4;
+  ULONG bFullName : sizeof(ULONG) * 8 / 4;
 } GET_MODULE_INFORMATION_FLAGS, *PGET_MODULE_INFORMATION_FLAGS;
 
 typedef struct _GET_MODULE_INFORMATION_CONTEXT
 {
- HMODULE hModule;
- GET_MODULE_INFORMATION_FLAGS Flags;
- DWORD nBufSize;
- union
- {
-  LPWSTR lpUnicodeName;
-  LPSTR lpAnsiName;
-  LPMODULEINFO lpmodinfo;
-  LPVOID lpBuffer;
- };
+  HMODULE hModule;
+  GET_MODULE_INFORMATION_FLAGS Flags;
+  DWORD nBufSize;
+  union
+  {
+    LPWSTR lpUnicodeName;
+    LPSTR lpAnsiName;
+    LPMODULEINFO lpmodinfo;
+    LPVOID lpBuffer;
+  };
 } GET_MODULE_INFORMATION_CONTEXT, *PGET_MODULE_INFORMATION_CONTEXT;
 
-/* common callback */
-NTSTATUS STDCALL GetModuleInformationCallback
-(
- IN HANDLE ProcessHandle,
- IN PLDR_MODULE CurrentModule,
- IN OUT PVOID CallbackContext
-)
-{
- register PGET_MODULE_INFORMATION_CONTEXT pgmicContext =
-  (PGET_MODULE_INFORMATION_CONTEXT)CallbackContext;
-
- /* found the module we were looking for */
- if(CurrentModule->BaseAddress == pgmicContext->hModule)
- {
-  /* we want the module name */
-  if(pgmicContext->Flags.bWantName)
-  {
-   register NTSTATUS nErrCode;
-   register PUNICODE_STRING pwstrSource;
-   register ULONG l;
-   
-   if(pgmicContext->Flags.bFullName)
-    /* full name */
-    pwstrSource = &(CurrentModule->FullDllName);
-   else
-    /* base name only */
-    pwstrSource = &(CurrentModule->BaseDllName);
-   
-   /* paranoia */
-   pwstrSource->Length -= pwstrSource->Length % sizeof(WCHAR);
-   
-   /* l is the byte size of the user buffer */
-   l = pgmicContext->nBufSize * sizeof(WCHAR);
-   
-   /* if the user buffer has room for the string and a null terminator */
-   if(l >= (pwstrSource->Length + sizeof(WCHAR)))
-   {
-    /* limit the buffer size */
-    l = pwstrSource->Length;
-    
-    /* null-terminate the string */
-    if(pgmicContext->Flags.bUnicode)
-     pgmicContext->lpUnicodeName[l / sizeof(WCHAR)] = 0;
-    else
-     pgmicContext->lpAnsiName[l / sizeof(WCHAR)] = 0;
-   }
-
-   if(pgmicContext->Flags.bUnicode)
-   {
-    /* Unicode: direct copy */
-    /* NOTE: I've chosen not to check for ProcessHandle == NtCurrentProcess(),
-       this function is complicated enough as it is */
-    nErrCode = NtReadVirtualMemory
-    (
-     ProcessHandle,
-     pwstrSource->Buffer,
-     pgmicContext->lpUnicodeName,
-     l,
-     NULL
-    );
+NTSTATUS STDCALL
+GetModuleInformationCallback(IN HANDLE ProcessHandle,
+                             IN PLDR_MODULE CurrentModule,
+                             IN OUT PVOID CallbackContext)
+{
+  PGET_MODULE_INFORMATION_CONTEXT Context = (PGET_MODULE_INFORMATION_CONTEXT)CallbackContext;
 
-    if(NT_SUCCESS(nErrCode))
-     pgmicContext->nBufSize = l / sizeof(WCHAR);
-    else
+  /* found the module we were looking for */
+  if(CurrentModule->BaseAddress == Context->hModule)
+  {
+    /* we want the module name */
+    if(Context->Flags.bWantName)
     {
-     pgmicContext->nBufSize = 0;
[truncated at 1000 lines; 730 more skipped]
CVSspam 0.2.8