[project] Change ExAllocatePool to wv_?alloc
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Sun, 21 Nov 2010 06:10:18 +0000 (01:10 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Sun, 21 Nov 2010 06:10:18 +0000 (01:10 -0500)
Every instance of ExAllocatePool() has been replaced with one
of wv_malloc() or wv_palloc(), for non-paged memory pool
allocation and paged memory pool allocation, respectively.

Some coding style changes on changed lines, too, as I've
changed my mind yet again.

21 files changed:
WinVBlock.dev
src/aoe/driver.c
src/aoe/makedriver.bat
src/aoe/protocol.c
src/aoe/wv_stdlib.c [new file with mode: 0644]
src/include/winvblock.h
src/include/wv_stddef.h [new file with mode: 0644]
src/include/wv_stdlib.h [new file with mode: 0644]
src/winvblock/bus/bus.c
src/winvblock/bus/pnp.c
src/winvblock/debug.c
src/winvblock/device.c
src/winvblock/disk/disk.c
src/winvblock/disk/pnp.c
src/winvblock/filedisk/filedisk.c
src/winvblock/filedisk/grub4dos.c
src/winvblock/irp.c
src/winvblock/makedriver.bat
src/winvblock/ramdisk/ramdisk.c
src/winvblock/registry.c
src/winvblock/wv_stdlib.c [new file with mode: 0644]

index d18c70c..d9afef1 100644 (file)
@@ -1,7 +1,7 @@
 [Project]\r
 FileName=WinVBlock.dev\r
 Name=WinVBlock\r
-UnitCount=59\r
+UnitCount=63\r
 PchHead=-1\r
 PchSource=-1\r
 Ver=3\r
@@ -670,3 +670,43 @@ Priority=1000
 OverrideBuildCmd=0\r
 BuildCmd=\r
 \r
+[Unit61]\r
+FileName=src\winvblock\wv_stdlib.c\r
+CompileCpp=1\r
+Folder=WinVBlock\r
+Compile=1\r
+Link=1\r
+Priority=1000\r
+OverrideBuildCmd=0\r
+BuildCmd=\r
+\r
+[Unit60]\r
+FileName=src\include\wv_stdlib.h\r
+CompileCpp=1\r
+Folder=Include\r
+Compile=1\r
+Link=1\r
+Priority=1000\r
+OverrideBuildCmd=0\r
+BuildCmd=\r
+\r
+[Unit62]\r
+FileName=src\include\wv_stddef.h\r
+CompileCpp=1\r
+Folder=Include\r
+Compile=1\r
+Link=1\r
+Priority=1000\r
+OverrideBuildCmd=0\r
+BuildCmd=\r
+\r
+[Unit63]\r
+FileName=src\aoe\wv_stdlib.c\r
+CompileCpp=1\r
+Folder=AoE\r
+Compile=1\r
+Link=1\r
+Priority=1000\r
+OverrideBuildCmd=0\r
+BuildCmd=\r
+\r
index 4ef6d17..9e59a61 100644 (file)
@@ -30,6 +30,7 @@
 #include <ntddk.h>
 
 #include "winvblock.h"
+#include "wv_stdlib.h"
 #include "portable.h"
 #include "irp.h"
 #include "driver.h"
@@ -302,12 +303,8 @@ setup_reg (
          DBG ( "ZwEnumerateKey 1 failed (%lx)\n", status );
          goto e0_1;
        }
-      if ( ( KeyInformation =
-            ( PKEY_BASIC_INFORMATION ) ExAllocatePool ( NonPagedPool,
-                                                        ResultLength ) ) ==
-          NULL )
-       {
-         DBG ( "ExAllocatePool KeyData failed\n" );
+      if ((KeyInformation = wv_malloc(ResultLength)) == NULL) {
+          DBG("wv_malloc KeyData failed\n");
          goto e0_1;
          registry__close_key ( NetworkClassKeyHandle );
        }
@@ -323,12 +320,9 @@ setup_reg (
 
       InterfacesKeyStringLength =
        KeyInformation->NameLength + sizeof ( InterfacesPath );
-      if ( ( InterfacesKeyString =
-            ( PWCHAR ) ExAllocatePool ( NonPagedPool,
-                                        InterfacesKeyStringLength ) ) ==
-          NULL )
-       {
-         DBG ( "ExAllocatePool InterfacesKeyString failed\n" );
+      InterfacesKeyString = wv_malloc(InterfacesKeyStringLength);
+      if (InterfacesKeyString == NULL) {
+          DBG("wv_malloc InterfacesKeyString failed\n");
          goto e0_2;
        }
 
@@ -360,12 +354,8 @@ setup_reg (
                        status );
                  goto e1_1;
                }
-             if ( ( KeyValueInformation =
-                    ( PKEY_VALUE_PARTIAL_INFORMATION )
-                    ExAllocatePool ( NonPagedPool, ResultLength ) ) == NULL )
-               {
-                 DBG ( "ExAllocatePool InterfacesKey "
-                       "KeyValueData failed\n" );
+             if ((KeyValueInformation = wv_malloc(ResultLength)) == NULL) {
+            DBG("wv_malloc InterfacesKey KeyValueData failed\n");
                  goto e1_1;
                }
              if ( !
@@ -396,12 +386,8 @@ setup_reg (
        {
          LinkageKeyStringLength =
            KeyInformation->NameLength + sizeof ( LinkagePath );
-         if ( ( LinkageKeyString =
-                ( PWCHAR ) ExAllocatePool ( NonPagedPool,
-                                            LinkageKeyStringLength ) ) ==
-              NULL )
-           {
-             DBG ( "ExAllocatePool LinkageKeyString failed\n" );
+    if ((LinkageKeyString = wv_malloc(LinkageKeyStringLength)) == NULL) {
+        DBG("wv_malloc LinkageKeyString failed\n");
              goto e0_2;
            }
          RtlCopyMemory ( LinkageKeyString, KeyInformation->Name,
@@ -437,11 +423,8 @@ setup_reg (
                        status );
                  goto e2_1;
                }
-             if ( ( KeyValueInformation =
-                    ( PKEY_VALUE_PARTIAL_INFORMATION )
-                    ExAllocatePool ( NonPagedPool, ResultLength ) ) == NULL )
-               {
-                 DBG ( "ExAllocatePool LinkageKey KeyValueData failed\n" );
+        if ((KeyValueInformation = wv_malloc(ResultLength)) == NULL) {
+            DBG("wv_malloc LinkageKey KeyValueData failed\n");
                  goto e2_1;
                }
              if ( !
@@ -476,12 +459,8 @@ setup_reg (
              if ( Found )
                {
                  NewValueLength = KeyValueInformation->DataLength;
-                 if ( ( NewValue =
-                        ( PWCHAR ) ExAllocatePool ( NonPagedPool,
-                                                    NewValueLength ) ) ==
-                      NULL )
-                   {
-                     DBG ( "ExAllocatePool NewValue 1 failed\n" );
+      if ((NewValue = wv_malloc(NewValueLength)) == NULL) {
+          DBG("wv_malloc NewValue 1 failed\n");
                      goto e2_2;
                    }
                  RtlCopyMemory ( NewValue, KeyValueInformation->Data,
@@ -493,12 +472,8 @@ setup_reg (
                  NewValueLength =
                    KeyValueInformation->DataLength +
                    sizeof ( winvblock__literal_w );
-                 if ( ( NewValue =
-                        ( PWCHAR ) ExAllocatePool ( NonPagedPool,
-                                                    NewValueLength ) ) ==
-                      NULL )
-                   {
-                     DBG ( "ExAllocatePool NewValue 2 failed\n" );
+      if ((NewValue = wv_malloc(NewValueLength)) == NULL) {
+          DBG("wv_malloc NewValue 2 failed\n");
                      goto e2_2;
                    }
                  RtlCopyMemory ( NewValue, winvblock__literal_w,
@@ -516,11 +491,8 @@ setup_reg (
              Updated = TRUE;
              NewValueLength =
                sizeof ( winvblock__literal_w ) + sizeof ( WCHAR );
-             if ( ( NewValue =
-                    ( PWCHAR ) ExAllocatePool ( NonPagedPool,
-                                                NewValueLength ) ) == NULL )
-               {
-                 DBG ( "ExAllocatePool NewValue 3 failed\n" );
+        if ((NewValue = wv_malloc(NewValueLength)) == NULL) {
+            DBG("wv_malloc NewValue 3 failed\n");
                  goto e2_1;
                }
              RtlZeroMemory ( NewValue, NewValueLength );
@@ -549,11 +521,8 @@ setup_reg (
           * start nic (
           */
          NdiKeyStringLength = KeyInformation->NameLength + sizeof ( NdiPath );
-         if ( ( NdiKeyString =
-                ( PWCHAR ) ExAllocatePool ( NonPagedPool,
-                                            NdiKeyStringLength ) ) == NULL )
-           {
-             DBG ( "ExAllocatePool NdiKeyString failed\n" );
+    if ((NdiKeyString = wv_malloc(NdiKeyStringLength)) == NULL) {
+        DBG("wv_malloc NdiKeyString failed\n");
              goto e0_2;
            }
          RtlCopyMemory ( NdiKeyString, KeyInformation->Name,
@@ -584,12 +553,8 @@ setup_reg (
                            status );
                      goto e3_1;
                    }
-                 if ( ( KeyValueInformation =
-                        ( PKEY_VALUE_PARTIAL_INFORMATION )
-                        ExAllocatePool ( NonPagedPool,
-                                         ResultLength ) ) == NULL )
-                   {
-                     DBG ( "ExAllocatePool NdiKey KeyValueData failed\n" );
+      if ((KeyValueInformation = wv_malloc(ResultLength)) == NULL) {
+          DBG("wv_malloc NdiKey KeyValueData failed\n");
                      goto e3_1;
                    }
                  if ( !
@@ -608,17 +573,13 @@ setup_reg (
                      DBG ( "ZwClose NdiKey SubKeyHandle failed\n" );
                      goto e3_0;
                    }
-                 if ( ( DriverServiceNameString =
-                        ( PWCHAR ) ExAllocatePool ( NonPagedPool,
-                                                    sizeof
-                                                    ( DriverServiceNamePath )
-                                                    +
-                                                    KeyValueInformation->DataLength
-                                                    - sizeof ( WCHAR ) ) ) ==
-                      NULL )
-                   {
-                     DBG ( "ExAllocatePool DriverServiceNameString "
-                           "failed\n" );
+      DriverServiceNameString = wv_malloc(
+          sizeof DriverServiceNamePath +
+          KeyValueInformation->DataLength -
+          sizeof *DriverServiceNamePath
+        );
+      if (DriverServiceNameString == NULL) {
+          DBG("wv_malloc DriverServiceNameString failed\n");
                      goto e3_0;
                    }
 
@@ -739,10 +700,8 @@ DriverEntry (
   /*
    * Allocate and zero-fill the global probe tag 
    */
-  if ( ( AoE_Globals_ProbeTag =
-        ( work_tag_ptr ) ExAllocatePool ( NonPagedPool,
-                                          sizeof ( work_tag ) ) ) == NULL )
-    {
+  AoE_Globals_ProbeTag = wv_malloc(sizeof *AoE_Globals_ProbeTag);
+  if (AoE_Globals_ProbeTag == NULL) {
       DBG ( "Couldn't allocate probe tag; bye!\n" );
       return STATUS_INSUFFICIENT_RESOURCES;
     }
@@ -755,11 +714,10 @@ DriverEntry (
   /*
    * Allocate and zero-fill the probe tag's packet reference 
    */
-  if ( ( AoE_Globals_ProbeTag->packet_data =
-        ( packet_ptr ) ExAllocatePool ( NonPagedPool,
-                                        AoE_Globals_ProbeTag->
-                                        PacketSize ) ) == NULL )
-    {
+  AoE_Globals_ProbeTag->packet_data = wv_malloc(
+      AoE_Globals_ProbeTag->PacketSize
+    );
+  if (AoE_Globals_ProbeTag->packet_data == NULL) {
       DBG ( "Couldn't allocate AoE_Globals_ProbeTag->packet_data\n" );
       ExFreePool ( AoE_Globals_ProbeTag );
       return STATUS_INSUFFICIENT_RESOURCES;
@@ -996,11 +954,7 @@ disk__init_decl (
   /*
    * Allocate our disk search 
    */
-  if ( ( disk_searcher =
-        ( disk_search_ptr ) ExAllocatePool ( NonPagedPool,
-                                             sizeof ( disk_search ) ) ) ==
-       NULL )
-    {
+  if ((disk_searcher = wv_malloc(sizeof *disk_searcher)) == NULL) {
       DBG ( "Couldn't allocate for disk_searcher; bye!\n" );
       return FALSE;
     }
@@ -1237,11 +1191,7 @@ disk__init_decl (
       /*
        * Establish our tag 
        */
-      if ( ( tag =
-            ( work_tag_ptr ) ExAllocatePool ( NonPagedPool,
-                                              sizeof ( work_tag ) ) ) ==
-          NULL )
-       {
+      if ((tag = wv_malloc(sizeof *tag)) == NULL) {
          DBG ( "Couldn't allocate tag\n" );
          KeReleaseSpinLock ( &disk_ptr->SpinLock, Irql );
          /*
@@ -1257,10 +1207,7 @@ disk__init_decl (
        * Establish our tag's AoE packet 
        */
       tag->PacketSize = sizeof ( packet );
-      if ( ( tag->packet_data =
-            ( packet_ptr ) ExAllocatePool ( NonPagedPool,
-                                            tag->PacketSize ) ) == NULL )
-       {
+      if ((tag->packet_data = wv_malloc(tag->PacketSize)) == NULL) {
          DBG ( "Couldn't allocate tag->packet_data\n" );
          ExFreePool ( tag );
          tag = NULL;
@@ -1394,10 +1341,7 @@ disk__io_decl (
   /*
    * Allocate and zero-fill our request 
    */
-  if ( ( request_ptr =
-        ( io_req_ptr ) ExAllocatePool ( NonPagedPool,
-                                        sizeof ( io_req ) ) ) == NULL )
-    {
+  if ((request_ptr = wv_malloc(sizeof *request_ptr)) == NULL) {
       DBG ( "Couldn't allocate for reques_ptr; bye!\n" );
       irp->IoStatus.Information = 0;
       irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES;
@@ -1423,11 +1367,7 @@ disk__io_decl (
       /*
        * Allocate each tag 
        */
-      if ( ( tag =
-            ( work_tag_ptr ) ExAllocatePool ( NonPagedPool,
-                                              sizeof ( work_tag ) ) ) ==
-          NULL )
-       {
+      if ((tag = wv_malloc(sizeof *tag)) == NULL) {
          DBG ( "Couldn't allocate tag; bye!\n" );
          /*
           * We failed while allocating tags; free the ones we built 
@@ -1468,10 +1408,7 @@ disk__io_decl (
       tag->PacketSize = sizeof ( packet );
       if ( mode == disk__io_mode_write )
        tag->PacketSize += tag->SectorCount * disk_ptr->SectorSize;
-      if ( ( tag->packet_data =
-            ( packet_ptr ) ExAllocatePool ( NonPagedPool,
-                                            tag->PacketSize ) ) == NULL )
-       {
+      if ((tag->packet_data = wv_malloc(tag->PacketSize)) == NULL) {
          DBG ( "Couldn't allocate tag->packet_data; bye!\n" );
          /*
           * We failed while allocating an AoE packet; free
@@ -1618,12 +1555,8 @@ add_target (
       Walker = Walker->next;
     }
 
-  if ( ( Walker =
-        ( target_list_ptr ) ExAllocatePool ( NonPagedPool,
-                                             sizeof ( target_list ) ) ) ==
-       NULL )
-    {
-      DBG ( "ExAllocatePool Target\n" );
+  if ((Walker = wv_malloc(sizeof *Walker)) == NULL) {
+      DBG("wv_malloc Walker\n");
       KeReleaseSpinLock ( &AoE_Globals_TargetListSpinLock, Irql );
       return;
     }
@@ -2222,15 +2155,10 @@ irp__handler_decl (
       target_walker = target_walker->next;
     }
 
-  targets =
-    ( aoe__mount_targets_ptr ) ExAllocatePool ( NonPagedPool,
-                                               sizeof ( aoe__mount_targets ) +
-                                               ( count *
-                                                 sizeof
-                                                 ( aoe__mount_target ) ) );
+  targets = wv_malloc(sizeof *targets + (count * sizeof targets->Target[0]));
   if ( targets == NULL )
     {
-      DBG ( "ExAllocatePool targets\n" );
+      DBG("wv_malloc targets\n");
       Irp->IoStatus.Information = 0;
       return STATUS_INSUFFICIENT_RESOURCES;
     }
@@ -2286,16 +2214,9 @@ irp__handler_decl (
       dev_walker = dev_walker->next_sibling_ptr;
     }
 
-  if ( ( disks =
-        ( aoe__mount_disks_ptr ) ExAllocatePool ( NonPagedPool,
-                                                  sizeof ( aoe__mount_disks )
-                                                  +
-                                                  ( count *
-                                                    sizeof
-                                                    ( aoe__mount_disk ) ) ) )
-       == NULL )
-    {
-      DBG ( "ExAllocatePool disks\n" );
+  disks = wv_malloc(sizeof *disks + (count * sizeof disks->Disk[0]));
+  if (disks == NULL ) {
+      DBG("wv_malloc disks\n");
       Irp->IoStatus.Information = 0;
       return STATUS_INSUFFICIENT_RESOURCES;
     }
@@ -2422,7 +2343,7 @@ create_aoe_disk (
    * AoE disk devices might be used for booting and should
    * not be allocated from a paged memory pool
    */
-  aoe_disk_ptr = ExAllocatePool ( NonPagedPool, sizeof ( aoe_disk_type ) );
+  aoe_disk_ptr = wv_malloc(sizeof *aoe_disk_ptr);
   if ( aoe_disk_ptr == NULL )
     goto err_noaoedisk;
   RtlZeroMemory ( aoe_disk_ptr, sizeof ( aoe_disk_type ) );
index 75dbac0..1fd9b28 100644 (file)
@@ -1,6 +1,6 @@
 @echo off\r
 \r
-set c=driver.c protocol.c aoe.rc\r
+set c=driver.c protocol.c aoe.rc wv_stdlib.c\r
 \r
 set name=AoE%bits%\r
 \r
index 4286a3c..497a545 100644 (file)
@@ -31,6 +31,7 @@
 #include <ntddndis.h>
 
 #include "winvblock.h"
+#include "wv_stdlib.h"
 #include "portable.h"
 #include "irp.h"
 #include "driver.h"
@@ -314,12 +315,8 @@ Protocol_Send (
       return FALSE;
     }
 
-  if ( ( DataBuffer =
-        ( PPROTOCOL_HEADER ) ExAllocatePool ( NonPagedPool,
-                                              ( sizeof ( PROTOCOL_HEADER ) +
-                                                DataSize ) ) ) == NULL )
-    {
-      DBG ( "ExAllocatePool DataBuffer\n" );
+  if ((DataBuffer = wv_malloc(sizeof *DataBuffer + DataSize)) == NULL) {
+      DBG("wv_malloc DataBuffer\n");
       return FALSE;
     }
 
@@ -527,20 +524,13 @@ Protocol_Receive (
       return NDIS_STATUS_SUCCESS;
     }
 
-  if ( ( HeaderCopy =
-        ( winvblock__uint8_ptr ) ExAllocatePool ( NonPagedPool,
-                                                  HeaderBufferSize ) ) ==
-       NULL )
-    {
-      DBG ( "ExAllocatePool HeaderCopy\n" );
+  if ((HeaderCopy = wv_malloc(HeaderBufferSize)) == NULL) {
+      DBG("wv_malloc HeaderCopy\n");
       return NDIS_STATUS_NOT_ACCEPTED;
     }
   RtlCopyMemory ( HeaderCopy, HeaderBuffer, HeaderBufferSize );
-  if ( ( Data =
-        ( winvblock__uint8_ptr ) ExAllocatePool ( NonPagedPool,
-                                                  PacketSize ) ) == NULL )
-    {
-      DBG ( "ExAllocatePool HeaderData\n" );
+  if ((Data = wv_malloc(PacketSize)) == NULL) {
+      DBG("wv_malloc HeaderData\n");
       ExFreePool ( HeaderCopy );
       return NDIS_STATUS_NOT_ACCEPTED;
     }
@@ -655,13 +645,8 @@ Protocol_BindAdapter (
   DBG ( "Entry\n" );
 #endif
 
-  if ( ( Context =
-        ( NDIS_HANDLE ) ExAllocatePool ( NonPagedPool,
-                                         sizeof
-                                         ( PROTOCOL_BINDINGCONTEXT ) ) ) ==
-       NULL )
-    {
-      DBG ( "ExAllocatePool Context\n" );
+  if ((Context = wv_malloc(sizeof *Context)) == NULL) {
+      DBG("wv_malloc Context\n");
       *StatusOut = NDIS_STATUS_RESOURCES;
       return;
     }
@@ -712,12 +697,12 @@ Protocol_BindAdapter (
         NdisQueryAdapterInstanceName ( &AdapterInstanceName,
                                        Context->BindingHandle ) ) )
     {
-      if ( ( Context->AdapterName =
-            ( PWCHAR ) ExAllocatePool ( NonPagedPool,
-                                        AdapterInstanceName.Length +
-                                        sizeof ( WCHAR ) ) ) == NULL )
-       {
-         DBG ( "ExAllocatePool AdapterName\n" );
+      Context->AdapterName = wv_malloc(
+          AdapterInstanceName.Length +
+          sizeof (WCHAR)
+        );
+      if (Context->AdapterName == NULL) {
+        DBG("wv_malloc AdapterName\n");
        }
       else
        {
@@ -736,12 +721,9 @@ Protocol_BindAdapter (
   Context->DeviceName = NULL;
   if ( DeviceName->Length > 0 )
     {
-      if ( ( Context->DeviceName =
-            ( PWCHAR ) ExAllocatePool ( NonPagedPool,
-                                        DeviceName->Length +
-                                        sizeof ( WCHAR ) ) ) == NULL )
-       {
-         DBG ( "ExAllocatePool DeviceName\n" );
+      Context->DeviceName = wv_malloc(DeviceName->Length + sizeof (WCHAR));
+      if (Context->DeviceName == NULL) {
+          DBG("wv_malloc DeviceName\n");
        }
       else
        {
diff --git a/src/aoe/wv_stdlib.c b/src/aoe/wv_stdlib.c
new file mode 100644 (file)
index 0000000..e682b9c
--- /dev/null
@@ -0,0 +1,29 @@
+/**\r
+ * Copyright (C) 2009-2010, Shao Miller <shao.miller@yrdsb.edu.on.ca>.\r
+ *\r
+ * This file is part of WinVBlock, originally derived from WinAoE.\r
+ *\r
+ * WinVBlock is free software: you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation, either version 3 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * WinVBlock is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.\r
+ */\r
+\r
+#include <ntddk.h>\r
+#include "wv_stdlib.h"\r
+\r
+void *wv_malloc(wv_size_t size) {\r
+    return ExAllocatePoolWithTag(NonPagedPool, size, 'klBV');\r
+  }\r
+\r
+void *wv_palloc(wv_size_t size) {\r
+    return ExAllocatePoolWithTag(PagedPool, size, 'klBV');\r
+  }\r
index 09d4151..2968022 100644 (file)
@@ -55,9 +55,6 @@ winvblock__def_type ( UINT16, winvblock__uint16 );
 winvblock__def_type ( BOOLEAN, winvblock__bool );
 typedef void *winvblock__any_ptr;
 
-/* ExAllocatePool() is deprecated now */
-#  define ExAllocatePool( x, y ) ExAllocatePoolWithTag ( x, y, 'klBV' )
-
 /* To export functions while serving as a library */
 #  ifdef PROJECT_BUS
 #    define winvblock__lib_func __declspec(dllexport)
diff --git a/src/include/wv_stddef.h b/src/include/wv_stddef.h
new file mode 100644 (file)
index 0000000..5d1e5fa
--- /dev/null
@@ -0,0 +1,26 @@
+/**\r
+ * Copyright (C) 2009-2010, Shao Miller <shao.miller@yrdsb.edu.on.ca>.\r
+ *\r
+ * This file is part of WinVBlock, originally derived from WinAoE.\r
+ *\r
+ * WinVBlock is free software: you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation, either version 3 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * WinVBlock is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.\r
+ */\r
+#ifndef _wv_stddef_h\r
+#  define _wv_stddef_h\r
+#  include "stddef.h"\r
+\r
+/* Type for the size, in bytes, of any object. */\r
+typedef size_t wv_size_t;\r
+\r
+#endif /* _wv_stddef_h */\r
diff --git a/src/include/wv_stdlib.h b/src/include/wv_stdlib.h
new file mode 100644 (file)
index 0000000..0b2984d
--- /dev/null
@@ -0,0 +1,29 @@
+/**\r
+ * Copyright (C) 2009-2010, Shao Miller <shao.miller@yrdsb.edu.on.ca>.\r
+ *\r
+ * This file is part of WinVBlock, originally derived from WinAoE.\r
+ *\r
+ * WinVBlock is free software: you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation, either version 3 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * WinVBlock is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.\r
+ */\r
+#ifndef _wv_stdlib_h\r
+#  define _wv_stdlib_h\r
+#  include "wv_stddef.h"\r
+\r
+/* Allocate memory from non-paged memory pool. */\r
+void *wv_malloc(wv_size_t size);\r
+\r
+/* Allocate memory from paged memory pool. */\r
+void *wv_palloc(wv_size_t size);\r
+\r
+#endif /* _wv_stdlib_h */\r
index 4ae06de..f806c63 100644 (file)
@@ -29,6 +29,7 @@
 #include <ntddk.h>
 
 #include "winvblock.h"
+#include "wv_stdlib.h"
 #include "portable.h"
 #include "irp.h"
 #include "driver.h"
@@ -354,7 +355,7 @@ bus__create (
    * Bus devices might be used for booting and should
    * not be allocated from a paged memory pool
    */
-  bus_ptr = ExAllocatePool ( NonPagedPool, sizeof ( bus__type ) );
+  bus_ptr = wv_malloc(sizeof *bus_ptr);
   if ( bus_ptr == NULL )
     goto err_nobus;
   RtlZeroMemory ( bus_ptr, sizeof ( bus__type ) );
index 45348c0..49a71af 100644 (file)
@@ -29,6 +29,7 @@
 #include <ntddk.h>
 
 #include "winvblock.h"
+#include "wv_stdlib.h"
 #include "portable.h"
 #include "irp.h"
 #include "driver.h"
@@ -137,11 +138,9 @@ irp__handler_decl ( bus_pnp__query_dev_relations )
       count++;
       walker = walker->next_sibling_ptr;
     }
-  dev_relations =
-    ( PDEVICE_RELATIONS ) ExAllocatePool ( NonPagedPool,
-                                          sizeof ( DEVICE_RELATIONS ) +
-                                          ( sizeof ( PDEVICE_OBJECT ) *
-                                            count ) );
+  dev_relations = wv_malloc(
+      sizeof *dev_relations + (sizeof (PDEVICE_OBJECT) * count)
+    );
   if ( dev_relations == NULL )
     {
       Irp->IoStatus.Information = 0;
index 662de96..cb0926f 100644 (file)
@@ -35,6 +35,7 @@
 #include <ndis.h>
 
 #include "winvblock.h"
+#include "wv_stdlib.h"
 #include "portable.h"
 #include "irp.h"
 #include "driver.h"
@@ -149,18 +150,12 @@ Debug_IrpStart (
    Temp;
   KIRQL Irql;
 
-  if ( ( DebugMessage =
-        ( PCHAR ) ExAllocatePool ( NonPagedPool, 1024 ) ) == NULL )
-    {
-      DBG ( "ExAllocatePool DebugMessage\n" );
+  if ((DebugMessage = wv_malloc(1024)) == NULL) {
+      DBG("wv_malloc DebugMessage\n");
     }
   Debug_DecodeIrp ( DeviceObject, Irp, DebugMessage );
-  if ( ( Record =
-        ( PDEBUG_IRPLIST ) ExAllocatePool ( NonPagedPool,
-                                            sizeof ( DEBUG_IRPLIST ) ) ) ==
-       NULL )
-    {
-      DBG ( "ExAllocatePool Record\n" );
+  if ((Record = wv_malloc(sizeof *Record)) == NULL) {
+      DBG("wv_malloc Record\n");
       DBG ( "IRP %s\n", DebugMessage );
     }
   Record->Next = NULL;
index f5df85b..331594d 100644 (file)
@@ -29,6 +29,7 @@
 #include <ntddk.h>
 
 #include "winvblock.h"
+#include "wv_stdlib.h"
 #include "portable.h"
 #include "irp.h"
 #include "device.h"
@@ -82,7 +83,7 @@ device__create (
    * Devices might be used for booting and should
    * not be allocated from a paged memory pool
    */
-  dev_ptr = ExAllocatePool ( NonPagedPool, sizeof ( device__type ) );
+  dev_ptr = wv_malloc(sizeof *dev_ptr);
   if ( dev_ptr == NULL )
     return NULL;
   RtlZeroMemory ( dev_ptr, sizeof ( device__type ) );
index 85fb5f9..c91e21e 100644 (file)
@@ -29,6 +29,7 @@
 #include <ntddk.h>
 
 #include "winvblock.h"
+#include "wv_stdlib.h"
 #include "portable.h"
 #include "irp.h"
 #include "driver.h"
@@ -407,7 +408,7 @@ disk__create (
    * Disk devices might be used for booting and should
    * not be allocated from a paged memory pool
    */
-  disk_ptr = ExAllocatePool ( NonPagedPool, sizeof ( disk__type ) );
+  disk_ptr = wv_malloc(sizeof *disk_ptr);
   if ( disk_ptr == NULL )
     goto err_nodisk;
   RtlZeroMemory ( disk_ptr, sizeof ( disk__type ) );
index c97c3d2..5d29858 100644 (file)
@@ -31,6 +31,7 @@
 #include <initguid.h>
 
 #include "winvblock.h"
+#include "wv_stdlib.h"
 #include "portable.h"
 #include "irp.h"
 #include "driver.h"
@@ -47,11 +48,10 @@ irp__handler_decl ( disk_pnp__query_id )
   disk__type_ptr disk_ptr;
 
   disk_ptr = disk__get_ptr ( dev_ptr );
-  string =
-    ( PWCHAR ) ExAllocatePool ( NonPagedPool, ( 512 * sizeof ( WCHAR ) ) );
+  string = wv_malloc(512 * sizeof *string);
   if ( string == NULL )
     {
-      DBG ( "ExAllocatePool IRP_MN_QUERY_ID\n" );
+      DBG("wv_malloc IRP_MN_QUERY_ID\n");
       status = STATUS_INSUFFICIENT_RESOURCES;
       goto alloc_string;
     }
@@ -70,12 +70,10 @@ irp__handler_decl ( disk_pnp__query_id )
       goto alloc_info;
     }
 
-  Irp->IoStatus.Information =
-    ( ULONG_PTR ) ExAllocatePool ( PagedPool,
-                                  string_length * sizeof ( WCHAR ) );
+  Irp->IoStatus.Information = wv_palloc(string_length * sizeof *string);
   if ( Irp->IoStatus.Information == 0 )
     {
-      DBG ( "ExAllocatePool failed.\n" );
+      DBG("wv_palloc failed.\n");
       status = STATUS_INSUFFICIENT_RESOURCES;
       goto alloc_info;
     }
@@ -103,13 +101,12 @@ irp__handler_decl ( disk_pnp__query_dev_text )
   winvblock__uint32 string_length;
   disk__type_ptr disk_ptr;
 
-  string =
-    ( PWCHAR ) ExAllocatePool ( NonPagedPool, ( 512 * sizeof ( WCHAR ) ) );
+  string = wv_malloc(512 * sizeof *string);
   disk_ptr = disk__get_ptr ( dev_ptr );
 
   if ( string == NULL )
     {
-      DBG ( "ExAllocatePool IRP_MN_QUERY_DEVICE_TEXT\n" );
+      DBG("wv_malloc IRP_MN_QUERY_DEVICE_TEXT\n");
       status = STATUS_INSUFFICIENT_RESOURCES;
       goto alloc_string;
     }
@@ -119,12 +116,10 @@ irp__handler_decl ( disk_pnp__query_dev_text )
     {
       case DeviceTextDescription:
        string_length = swprintf ( string, winvblock__literal_w L" Disk" ) + 1;
-       Irp->IoStatus.Information =
-         ( ULONG_PTR ) ExAllocatePool ( PagedPool,
-                                        string_length * sizeof ( WCHAR ) );
+  Irp->IoStatus.Information = wv_palloc(string_length * sizeof *string);
        if ( Irp->IoStatus.Information == 0 )
          {
-           DBG ( "ExAllocatePool DeviceTextDescription\n" );
+      DBG("wv_palloc DeviceTextDescription\n");
            status = STATUS_INSUFFICIENT_RESOURCES;
            goto alloc_info;
          }
@@ -136,12 +131,10 @@ irp__handler_decl ( disk_pnp__query_dev_text )
       case DeviceTextLocationInformation:
        string_length =
          disk__query_id ( disk_ptr, BusQueryInstanceID, string );
-       Irp->IoStatus.Information =
-         ( ULONG_PTR ) ExAllocatePool ( PagedPool,
-                                        string_length * sizeof ( WCHAR ) );
+  Irp->IoStatus.Information = wv_palloc(string_length * sizeof *string);
        if ( Irp->IoStatus.Information == 0 )
          {
-           DBG ( "ExAllocatePool DeviceTextLocationInformation\n" );
+      DBG("wv_palloc DeviceTextLocationInformation\n");
            status = STATUS_INSUFFICIENT_RESOURCES;
            goto alloc_info;
          }
@@ -178,13 +171,10 @@ irp__handler_decl ( disk_pnp__query_dev_relations )
       status = Irp->IoStatus.Status;
       goto ret_path;
     }
-  dev_relations =
-    ( PDEVICE_RELATIONS ) ExAllocatePool ( PagedPool,
-                                          sizeof ( DEVICE_RELATIONS ) +
-                                          sizeof ( PDEVICE_OBJECT ) );
+  dev_relations = wv_palloc(sizeof *dev_relations + sizeof dev_ptr->Self);
   if ( dev_relations == NULL )
     {
-      DBG ( "ExAllocatePool IRP_MN_QUERY_DEVICE_RELATIONS\n" );
+      DBG("wv_palloc IRP_MN_QUERY_DEVICE_RELATIONS\n");
       status = STATUS_INSUFFICIENT_RESOURCES;
       goto alloc_dev_relations;
     }
@@ -214,12 +204,10 @@ irp__handler_decl ( disk_pnp__query_bus_info )
   PPNP_BUS_INFORMATION pnp_bus_info;
   NTSTATUS status;
 
-  pnp_bus_info =
-    ( PPNP_BUS_INFORMATION ) ExAllocatePool ( PagedPool,
-                                             sizeof ( PNP_BUS_INFORMATION ) );
+  pnp_bus_info = wv_palloc(sizeof *pnp_bus_info);
   if ( pnp_bus_info == NULL )
     {
-      DBG ( "ExAllocatePool IRP_MN_QUERY_BUS_INFORMATION\n" );
+      DBG("wv_palloc IRP_MN_QUERY_BUS_INFORMATION\n");
       status = STATUS_INSUFFICIENT_RESOURCES;
       goto alloc_pnp_bus_info;
     }
index 4ae3e23..566165c 100644 (file)
@@ -30,6 +30,7 @@
 #include <ntddstor.h>
 
 #include "winvblock.h"
+#include "wv_stdlib.h"
 #include "portable.h"
 #include "irp.h"
 #include "driver.h"
@@ -267,7 +268,7 @@ filedisk__create (
    * File-backed disk devices might be used for booting and should
    * not be allocated from a paged memory pool
    */
-  filedisk_ptr = ExAllocatePool ( NonPagedPool, sizeof ( filedisk__type ) );
+  filedisk_ptr = wv_malloc(sizeof *filedisk_ptr);
   if ( filedisk_ptr == NULL )
     goto err_nofiledisk;
   RtlZeroMemory ( filedisk_ptr, sizeof ( filedisk__type ) );
@@ -424,7 +425,7 @@ disk__io_decl (
   /*
    * Allocate the request
    */
-  req = ExAllocatePool ( NonPagedPool, sizeof ( thread_req ) );
+  req = wv_malloc(sizeof *req);
   if ( req == NULL )
     {
       irp->IoStatus.Information = 0;
@@ -582,7 +583,7 @@ hot_swap (
        sizeof ( obj_path_prefix ) - sizeof ( UNICODE_NULL ) +
        vol_dos_name.Length + sizeof ( path_sep ) +
        filedisk_ptr->filepath_unicode.Length;
-      filepath.Buffer = ExAllocatePool ( NonPagedPool, filepath.Length );
+      filepath.Buffer = wv_malloc(filepath.Length);
       if ( filepath.Buffer == NULL )
        {
          status = STATUS_UNSUCCESSFUL;
index b8579ec..d52da2f 100644 (file)
@@ -29,6 +29,7 @@
 #include <ntddstor.h>
 
 #include "winvblock.h"
+#include "wv_stdlib.h"
 #include "portable.h"
 #include "irp.h"
 #include "driver.h"
@@ -65,7 +66,7 @@ check_disk_match (
   /*
    * Allocate a buffer for testing for a MS .VHD footer
    */
-  buf = ExAllocatePool ( NonPagedPool, sizeof ( *buf ) );
+  buf = wv_malloc(sizeof *buf);
   if ( buf == NULL )
     {
       status = STATUS_INSUFFICIENT_RESOURCES;
@@ -270,7 +271,7 @@ process_param_block (
        */
       if ( *param_block == '/' || *param_block == '\\' )
        param_block++;
-      sets[i].filepath = ExAllocatePool ( NonPagedPool, walker - param_block );
+      sets[i].filepath = wv_malloc(walker - param_block);
       if ( sets[i].filepath == NULL )
        {
          DBG ( "Could not store filename\n" );
index c062447..664924c 100644 (file)
@@ -28,6 +28,7 @@
 #include <ntddk.h>
 
 #include "winvblock.h"
+#include "wv_stdlib.h"
 #include "portable.h"
 #include "irp.h"
 #include "driver.h"
@@ -84,7 +85,7 @@ irp__reg_table_s (
    * Allocate and attach a new link in the chain.
    * Maybe we should use a spin-lock for this
    */
-  new_link = ExAllocatePool ( NonPagedPool, sizeof ( handler_chain ) );
+  new_link = wv_malloc(sizeof *new_link);
   if ( new_link == NULL )
     {
       /*
index 09fa27f..827266c 100644 (file)
@@ -10,7 +10,7 @@ for /d %%a in (%lib%) do (
   popd\r
   )\r
 \r
-set c=debug.c driver.c irp.c probe.c registry.c winvblock.rc device.c\r
+set c=debug.c driver.c irp.c probe.c registry.c winvblock.rc device.c wv_stdlib.c\r
 \r
 set name=WVBlk%bits%\r
 \r
index bf06e38..28c9b3f 100644 (file)
@@ -28,6 +28,7 @@
 #include <ntddk.h>
 
 #include "winvblock.h"
+#include "wv_stdlib.h"
 #include "portable.h"
 #include "irp.h"
 #include "driver.h"
@@ -176,7 +177,7 @@ ramdisk__create (
    * RAM disk devices might be used for booting and should
    * not be allocated from a paged memory pool
    */
-  ramdisk_ptr = ExAllocatePool ( NonPagedPool, sizeof ( ramdisk__type ) );
+  ramdisk_ptr = wv_malloc(sizeof *ramdisk_ptr);
   if ( ramdisk_ptr == NULL )
     goto err_noramdisk;
   RtlZeroMemory ( ramdisk_ptr, sizeof ( ramdisk__type ) );
index 6843335..a96dbb7 100644 (file)
@@ -30,6 +30,7 @@
 #include <ntddk.h>
 
 #include "winvblock.h"
+#include "wv_stdlib.h"
 #include "portable.h"
 #include "debug.h"
 #include "irp.h"
@@ -120,11 +121,11 @@ registry__fetch_kvi (
   /*
    * Allocate value buffer 
    */
-  *kvi = ExAllocatePool ( NonPagedPool, kvi_len );
+  *kvi = wv_malloc(kvi_len);
   if ( !*kvi )
     {
       DBG ( "Could not allocate KVI for \"%S\": %x\n", value_name, status );
-      goto err_exallocatepoolwithtag_kvi;
+      goto err_kvi;
     }
 
   /*
@@ -143,7 +144,7 @@ registry__fetch_kvi (
 
 err_zwqueryvaluekey:
   ExFreePool ( kvi );
-err_exallocatepoolwithtag_kvi:
+err_kvi:
 err_zwqueryvaluekey_len:
   return status;
 }
@@ -180,17 +181,17 @@ registry__fetch_sz (
    * Allocate and populate string 
    */
   value_len = ( kvi->DataLength + sizeof ( value[0] ) );
-  *value = ExAllocatePool ( NonPagedPool, value_len );
+  *value = wv_malloc(value_len);
   if ( !*value )
     {
       DBG ( "Could not allocate value for \"%S\"\n", value_name );
       status = STATUS_UNSUCCESSFUL;
-      goto err_exallocatepoolwithtag_value;
+      goto err_value;
     }
   RtlZeroMemory ( *value, value_len );
   RtlCopyMemory ( *value, kvi->Data, kvi->DataLength );
 
-err_exallocatepoolwithtag_value:
+err_value:
   ExFreePool ( kvi );
 err_fetchkvi:
   return status;
@@ -245,12 +246,12 @@ registry__fetch_multi_sz (
   values_len =
     ( ( ( num_strings + 1 ) * sizeof ( values[0] ) ) + kvi->DataLength +
       sizeof ( values[0][0] ) );
-  *values = ExAllocatePool ( NonPagedPool, values_len );
+  *values = wv_malloc(values_len);
   if ( !*values )
     {
       DBG ( "Could not allocate value array for \"%S\"\n", value_name );
       status = STATUS_UNSUCCESSFUL;
-      goto err_exallocatepoolwithtag_value;
+      goto err_value;
     }
   RtlZeroMemory ( *values, values_len );
   string = ( ( LPWSTR ) ( *values + num_strings + 1 ) );
@@ -264,7 +265,7 @@ registry__fetch_multi_sz (
        string++;
     }
 
-err_exallocatepoolwithtag_value:
+err_value:
   ExFreePool ( kvi );
 err_fetchkvi:
   return status;
diff --git a/src/winvblock/wv_stdlib.c b/src/winvblock/wv_stdlib.c
new file mode 100644 (file)
index 0000000..bf7b8f4
--- /dev/null
@@ -0,0 +1,29 @@
+/**\r
+ * Copyright (C) 2009-2010, Shao Miller <shao.miller@yrdsb.edu.on.ca>.\r
+ *\r
+ * This file is part of WinVBlock, originally derived from WinAoE.\r
+ *\r
+ * WinVBlock is free software: you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation, either version 3 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * WinVBlock is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.\r
+ */\r
+\r
+#include <ntddk.h>\r
+#include "wv_stdlib.h"\r
+\r
+void *wv_malloc(wv_size_t size) {\r
+    return ExAllocatePoolWithTag(NonPagedPool, size, 'EoAW');\r
+  }\r
+\r
+void *wv_palloc(wv_size_t size) {\r
+    return ExAllocatePoolWithTag(PagedPool, size, 'EoAW');\r
+  }\r