]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Nt32Pkg/WinNtBlockIoDxe/DriverDiagnostics.c
Fix the bug that WinNtBlockIo fails to properly allocate a buffer.
[mirror_edk2.git] / Nt32Pkg / WinNtBlockIoDxe / DriverDiagnostics.c
index 1060d46001140b3262ea50bd97a27e448258ef03..18d099bae7eba78e0765ea5057ff1f0f2653ad60 100644 (file)
@@ -1,7 +1,7 @@
-/*++\r
+/**@file\r
 \r
-Copyright (c) 2006 - 2007, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
+Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
 http://opensource.org/licenses/bsd-license.php\r
@@ -15,7 +15,7 @@ Module Name:
 \r
 Abstract:\r
 \r
---*/\r
+**/\r
 #include <Uefi.h>\r
 #include <WinNtDxe.h>\r
 #include <Protocol/BlockIo.h>\r
@@ -179,18 +179,25 @@ WinNtBlockIoDriverDiagnosticsRunDiagnostics (
   if (DiagnosticType != EfiDriverDiagnosticTypeStandard) {\r
     *ErrorType  = &gEfiBlockIoProtocolGuid;\r
     *BufferSize = 0x60;\r
-    Buffer = AllocatePool ((UINTN) (*BufferSize));\r
+    *Buffer = AllocatePool ((UINTN) (*BufferSize));\r
     CopyMem (*Buffer, L"Windows Block I/O Driver Diagnostics Failed\n", *BufferSize);\r
     return EFI_DEVICE_ERROR;\r
   }\r
 \r
+  //\r
+  // This is a device driver, so ChildHandle must be NULL.\r
+  //\r
+  if (ChildHandle != NULL) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
   //\r
   // Validate controller handle\r
   //\r
   Status = gBS->OpenProtocol (\r
                   ControllerHandle,\r
                   &gEfiWinNtIoProtocolGuid,\r
-                  &BlockIo,\r
+                  (VOID **) &BlockIo,\r
                   gWinNtBlockIoDriverBinding.DriverBindingHandle,\r
                   ControllerHandle,\r
                   EFI_OPEN_PROTOCOL_BY_DRIVER\r
@@ -207,6 +214,7 @@ WinNtBlockIoDriverDiagnosticsRunDiagnostics (
     return EFI_UNSUPPORTED;\r
   }\r
 \r
+  \r
   if (Status == EFI_UNSUPPORTED) {\r
     return Status;\r
   } else if (Status != EFI_ALREADY_STARTED) {\r