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