Aric Stewart : hidclass.sys: Add hidclass.sys.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Jul 8 09:51:23 CDT 2015


Module: wine
Branch: master
Commit: 270790a9df1501c1e71dae20ebaae942aee73855
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=270790a9df1501c1e71dae20ebaae942aee73855

Author: Aric Stewart <aric at codeweavers.com>
Date:   Mon Jul  6 13:09:14 2015 -0500

hidclass.sys: Add hidclass.sys.

---

 configure                           |  2 +
 configure.ac                        |  1 +
 dlls/hidclass.sys/Makefile.in       |  7 ++++
 dlls/hidclass.sys/hid.h             | 35 ++++++++++++++++++
 dlls/hidclass.sys/hidclass.sys.spec |  1 +
 dlls/hidclass.sys/main.c            | 74 +++++++++++++++++++++++++++++++++++++
 6 files changed, 120 insertions(+)

diff --git a/configure b/configure
index cb6afc1..ebaa38c 100755
--- a/configure
+++ b/configure
@@ -1078,6 +1078,7 @@ enable_gpkcsp
 enable_hal
 enable_hhctrl_ocx
 enable_hid
+enable_hidclass_sys
 enable_hlink
 enable_hnetcfg
 enable_httpapi
@@ -17289,6 +17290,7 @@ wine_fn_config_dll gpkcsp enable_gpkcsp
 wine_fn_config_dll hal enable_hal
 wine_fn_config_dll hhctrl.ocx enable_hhctrl_ocx clean,implib,po htmlhelp
 wine_fn_config_dll hid enable_hid implib
+wine_fn_config_dll hidclass.sys enable_hidclass_sys implib hidclass
 wine_fn_config_dll hlink enable_hlink clean,implib
 wine_fn_config_test dlls/hlink/tests hlink_test
 wine_fn_config_dll hnetcfg enable_hnetcfg clean
diff --git a/configure.ac b/configure.ac
index cca4e0c..fa58592 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2987,6 +2987,7 @@ WINE_CONFIG_DLL(gpkcsp)
 WINE_CONFIG_DLL(hal)
 WINE_CONFIG_DLL(hhctrl.ocx,,[clean,implib,po],[htmlhelp])
 WINE_CONFIG_DLL(hid,,[implib])
+WINE_CONFIG_DLL(hidclass.sys,,[implib],[hidclass])
 WINE_CONFIG_DLL(hlink,,[clean,implib])
 WINE_CONFIG_TEST(dlls/hlink/tests)
 WINE_CONFIG_DLL(hnetcfg,,[clean])
diff --git a/dlls/hidclass.sys/Makefile.in b/dlls/hidclass.sys/Makefile.in
new file mode 100644
index 0000000..b3fdd1c
--- /dev/null
+++ b/dlls/hidclass.sys/Makefile.in
@@ -0,0 +1,7 @@
+MODULE    = hidclass.sys
+IMPORTLIB = hidclass
+IMPORTS   = ntoskrnl.exe
+DELAYIMPORTS = setupapi hid
+
+C_SRCS = \
+	main.c
diff --git a/dlls/hidclass.sys/hid.h b/dlls/hidclass.sys/hid.h
new file mode 100644
index 0000000..f058e46
--- /dev/null
+++ b/dlls/hidclass.sys/hid.h
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2015 Aric Stewart
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include "ntstatus.h"
+#define WIN32_NO_STATUS
+#include "windef.h"
+#include "winbase.h"
+#include "winternl.h"
+#include "ddk/wdm.h"
+#include "ddk/hidport.h"
+#include "wine/list.h"
+
+typedef struct _minidriver
+{
+    struct list entry;
+
+    HID_MINIDRIVER_REGISTRATION minidriver;
+
+    PDRIVER_UNLOAD DriverUnload;
+} minidriver;
diff --git a/dlls/hidclass.sys/hidclass.sys.spec b/dlls/hidclass.sys/hidclass.sys.spec
new file mode 100644
index 0000000..3ec2525
--- /dev/null
+++ b/dlls/hidclass.sys/hidclass.sys.spec
@@ -0,0 +1 @@
+@ stdcall HidRegisterMinidriver(ptr)
diff --git a/dlls/hidclass.sys/main.c b/dlls/hidclass.sys/main.c
new file mode 100644
index 0000000..e4844862
--- /dev/null
+++ b/dlls/hidclass.sys/main.c
@@ -0,0 +1,74 @@
+/*
+ * WINE Hid device services
+ *
+ * Copyright 2015 Aric Stewart
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#define NONAMELESSUNION
+#include <unistd.h>
+#include <stdarg.h>
+#include "hid.h"
+#include "wine/debug.h"
+#include "wine/unicode.h"
+#include "wine/list.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(hid);
+
+static struct list minidriver_list = LIST_INIT(minidriver_list);
+
+static minidriver* find_minidriver(DRIVER_OBJECT *driver)
+{
+    minidriver *md;
+    LIST_FOR_EACH_ENTRY(md, &minidriver_list, minidriver, entry)
+    {
+        if (md->minidriver.DriverObject == driver)
+            return md;
+    }
+    return NULL;
+}
+
+static VOID WINAPI UnloadDriver(DRIVER_OBJECT *driver)
+{
+    minidriver *md;
+
+    TRACE("Driver Unload\n");
+    md = find_minidriver(driver);
+    if (md)
+    {
+        if (md->DriverUnload)
+            md->DriverUnload(md->minidriver.DriverObject);
+        list_remove(&md->entry);
+        HeapFree( GetProcessHeap(), 0, md );
+    }
+}
+
+NTSTATUS WINAPI HidRegisterMinidriver(HID_MINIDRIVER_REGISTRATION *registration)
+{
+    minidriver *driver;
+    driver = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*driver));
+
+    if (!driver)
+        return STATUS_NO_MEMORY;
+
+    driver->DriverUnload = registration->DriverObject->DriverUnload;
+    registration->DriverObject->DriverUnload = UnloadDriver;
+
+    driver->minidriver = *registration;
+    list_add_tail(&minidriver_list, &driver->entry);
+
+    return STATUS_SUCCESS;
+}




More information about the wine-cvs mailing list