[httpdisk] Add bus.c skeleton
authorShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Fri, 7 Jan 2011 21:35:48 +0000 (16:35 -0500)
committerShao Miller <Shao.Miller@yrdsb.edu.on.ca>
Fri, 7 Jan 2011 22:14:33 +0000 (17:14 -0500)
Really "bare bones" at this time.

WinVBlock.dev
src/httpdisk/Sources
src/httpdisk/bus.c [new file with mode: 0644]
src/httpdisk/httpdisk.c

index 9f7b105..ecb1a62 100644 (file)
@@ -1,7 +1,7 @@
 [Project]\r
 FileName=WinVBlock.dev\r
 Name=WinVBlock\r
-UnitCount=68\r
+UnitCount=69\r
 PchHead=-1\r
 PchSource=-1\r
 Ver=3\r
@@ -662,9 +662,9 @@ OverrideBuildCmd=0
 BuildCmd=\r
 \r
 [Unit69]\r
-FileName=src\include\aoe_bus.h\r
+FileName=src\httpdisk\bus.c\r
 CompileCpp=1\r
-Folder=Include\r
+Folder=HTTPDisk\r
 Compile=1\r
 Link=1\r
 Priority=1000\r
index 816ddeb..255efd2 100644 (file)
@@ -3,4 +3,4 @@ TARGETPATH=obj
 TARGETTYPE=DRIVER\r
 TARGETLIBS=$(SDK_LIB_PATH)\libcntpr.lib\r
 INCLUDES=..\include;$(DDK_INC_PATH);$(BASEDIR)\inc\mfc42;$(BASEDIR)\src\network\inc\r
-SOURCES=ksocket.c ktdi.c httpdisk.c httpdisk.rc\r
+SOURCES=ksocket.c ktdi.c httpdisk.c bus.c httpdisk.rc\r
diff --git a/src/httpdisk/bus.c b/src/httpdisk/bus.c
new file mode 100644 (file)
index 0000000..fe229a7
--- /dev/null
@@ -0,0 +1,97 @@
+/**
+ * Copyright (C) 2010-2011, Shao Miller <shao.miller@yrdsb.edu.on.ca>.
+ *
+ * This file is part of WinVBlock, originally derived from WinAoE.
+ *
+ * WinVBlock is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * WinVBlock is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with WinVBlock.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @file
+ *
+ * HTTPDisk bus specifics.
+ */
+
+#include <ntddk.h>
+
+#include "portable.h"
+
+/** Exports. */
+NTSTATUS STDCALL HttpdiskBusEstablish(void);
+VOID HttpdiskBusCleanup(void);
+DRIVER_ADD_DEVICE HttpdiskBusAttach;
+
+/** Private. */
+static NTSTATUS STDCALL HttpdiskBusCreateFdo_(void);
+static NTSTATUS STDCALL HttpdiskBusCreatePdo_(void);
+static VOID HttpdiskBusDeleteFdo_(void);
+
+/* Names for the HTTPDisk bus. */
+#define HTTPDISK_M_BUS_NAME_ (L"\\Device\\HTTPDisk")
+#define HTTPDISK_M_BUS_DOSNAME_ (L"\\DosDevices\\HTTPDisk")
+static UNICODE_STRING HttpdiskBusName_ = {
+    sizeof HTTPDISK_M_BUS_NAME_ - sizeof (WCHAR),
+    sizeof HTTPDISK_M_BUS_NAME_ - sizeof (WCHAR),
+    HTTPDISK_M_BUS_NAME_
+  };
+static UNICODE_STRING HttpdiskBusDosname_ = {
+    sizeof HTTPDISK_M_BUS_DOSNAME_ - sizeof (WCHAR),
+    sizeof HTTPDISK_M_BUS_DOSNAME_ - sizeof (WCHAR),
+    HTTPDISK_M_BUS_DOSNAME_
+  };
+
+NTSTATUS STDCALL HttpdiskBusEstablish(void) {
+    NTSTATUS status;
+
+    status = HttpdiskBusCreateFdo_();
+    if (!NT_SUCCESS(status))
+      goto err_fdo;
+
+    status = HttpdiskBusCreatePdo_();
+    if (!NT_SUCCESS(status))
+      goto err_pdo;
+
+    return STATUS_SUCCESS;
+
+    HttpdiskBusDeleteFdo_();
+    err_fdo:
+
+    /* TODO: Remove the PDO. */
+    err_pdo:
+
+    return status;
+  }
+
+VOID HttpdiskBusCleanup(void) {
+    return;
+  }
+
+NTSTATUS HttpdiskBusAttach(
+    IN PDRIVER_OBJECT DriverObj,
+    IN PDEVICE_OBJECT Pdo
+  ) {
+    return STATUS_NOT_SUPPORTED;
+  }
+
+static NTSTATUS STDCALL HttpdiskBusCreateFdo_(void) {
+    return STATUS_SUCCESS;
+  }
+
+static NTSTATUS STDCALL HttpdiskBusCreatePdo_(void) {
+    return STATUS_SUCCESS;
+  }
+
+static VOID HttpdiskBusDeleteFdo_(void) {
+    return;
+  }
index e16b6b9..eec3bf6 100644 (file)
@@ -1,6 +1,7 @@
 /*
     HTTP Virtual Disk.
     Copyright (C) 2006 Bo Brantén.
+    Portions copyright (C) 2011, Shao Miller <shao.miller@yrdsb.edu.on.ca>.
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation; either version 2 of the License, or
@@ -105,8 +106,15 @@ MmGetSystemAddressForMdlPrettySafe (
 }
 #endif
 
+#include "portable.h"
 #include "httpdisk.h"
 
+/* From bus.c */
+extern NTSTATUS STDCALL HttpdiskBusEstablish(void);
+extern VOID HttpdiskBusCleanup(void);
+extern DRIVER_ADD_DEVICE HttpdiskBusAttach;
+
+/* For this file. */
 #define PARAMETER_KEY           L"\\Parameters"
 
 #define NUMBEROFDEVICES_VALUE   L"NumberOfDevices"
@@ -349,8 +357,13 @@ DriverEntry (
     DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = HttpDiskDeviceControl;
 
     DriverObject->DriverUnload = HttpDiskUnload;
+    DriverObject->DriverExtension->AddDevice = HttpdiskBusAttach;
 
-    return STATUS_SUCCESS;
+    status = HttpdiskBusEstablish();
+    if (!NT_SUCCESS(status))
+      HttpDiskUnload(DriverObject);
+
+    return status;
 }
 
 NTSTATUS
@@ -485,6 +498,8 @@ HttpDiskUnload (
 {
     PDEVICE_OBJECT device_object;
 
+    HttpdiskBusCleanup();
+
     device_object = DriverObject->DeviceObject;
 
     while (device_object)