[dummy] Pass back the created PDO
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Mon, 3 Jan 2011 06:21:24 +0000 (01:21 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Mon, 3 Jan 2011 06:21:24 +0000 (01:21 -0500)
src/aoe/bus.c
src/include/dummy.h
src/winvblock/dummy.c

index 3a0c402..84156a2 100644 (file)
@@ -291,6 +291,7 @@ NTSTATUS STDCALL AoeBusAttachFdo(
  */
 NTSTATUS AoeBusCreate(IN PDRIVER_OBJECT driver_obj) {
     NTSTATUS status;
+    PDEVICE_OBJECT pdo;
 
     /* Do we already have our main bus? */
     if (AoeBusMain.Fdo) {
@@ -301,7 +302,8 @@ NTSTATUS AoeBusCreate(IN PDRIVER_OBJECT driver_obj) {
     status = WvDummyAdd(
         &AoeBusDummyIds,
         FILE_DEVICE_CONTROLLER,
-        FILE_DEVICE_SECURE_OPEN
+        FILE_DEVICE_SECURE_OPEN,
+        &pdo
       );
     if (!NT_SUCCESS(status)) {
         DBG("Couldn't add AoE bus to WinVBlock bus!\n");
index f675723..94a6a78 100644 (file)
@@ -99,7 +99,8 @@ static const WV_S_DUMMY_IDS DummyIds = {        \
 extern WVL_M_LIB NTSTATUS STDCALL WvDummyAdd(
     IN const WV_S_DUMMY_IDS *,
     IN DEVICE_TYPE,
-    IN ULONG
+    IN ULONG,
+    OUT PDEVICE_OBJECT *
   );
 
 #endif /* WV_M_DUMMY_H_ */
index 4f4aa57..0053420 100644 (file)
@@ -62,6 +62,7 @@ typedef struct WV_ADD_DUMMY {
     ULONG DevCharacteristics;
     PKEVENT Event;
     NTSTATUS Status;
+    PDEVICE_OBJECT Pdo;
   } WV_S_ADD_DUMMY, * WV_SP_ADD_DUMMY;
 
 /**
@@ -142,6 +143,7 @@ static VOID STDCALL WvDummyAdd_(PVOID context) {
     pdo->Flags &= ~DO_DEVICE_INITIALIZING;
 
     dummy_context->Status = STATUS_SUCCESS;
+    dummy_context->Pdo = pdo;
     KeSetEvent(dummy_context->Event, 0, FALSE);
     return;
 
@@ -164,12 +166,14 @@ static VOID STDCALL WvDummyAdd_(PVOID context) {
  * @v DummyIds                  The PnP IDs for the dummy.
  * @v DevType                   The type for the dummy device.
  * @v DevCharacteristics        The dummy device characteristics.
+ * @v Pdo                       Filled with a pointer to the created PDO.
  * @ret NTSTATUS                The status of the operation.
  */
 WVL_M_LIB NTSTATUS STDCALL WvDummyAdd(
     IN const WV_S_DUMMY_IDS * DummyIds,
     IN DEVICE_TYPE DevType,
-    IN ULONG DevCharacteristics
+    IN ULONG DevCharacteristics,
+    OUT PDEVICE_OBJECT * Pdo
   ) {
     KEVENT event;
     WV_S_ADD_DUMMY context = {
@@ -177,7 +181,8 @@ WVL_M_LIB NTSTATUS STDCALL WvDummyAdd(
         DevType,
         DevCharacteristics,
         &event,
-        STATUS_UNSUCCESSFUL
+        STATUS_UNSUCCESSFUL,
+        NULL
       };
     WVL_S_BUS_CUSTOM_WORK_ITEM work_item = {
         WvDummyAdd_,
@@ -206,6 +211,8 @@ WVL_M_LIB NTSTATUS STDCALL WvDummyAdd(
         NULL
       );
 
+    if (context.Pdo)
+      *Pdo = context.Pdo;
     return context.Status;
   }