[PATCH 1/6] winebus.sys: Introduce a new unixlib interface.

Rémi Bernon rbernon at codeweavers.com
Thu Aug 19 02:09:59 CDT 2021


Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 dlls/winebus.sys/Makefile.in |  3 ++-
 dlls/winebus.sys/main.c      |  9 ++++++++
 dlls/winebus.sys/unixlib.c   | 45 ++++++++++++++++++++++++++++++++++++
 dlls/winebus.sys/unixlib.h   | 34 +++++++++++++++++++++++++++
 4 files changed, 90 insertions(+), 1 deletion(-)
 create mode 100644 dlls/winebus.sys/unixlib.c
 create mode 100644 dlls/winebus.sys/unixlib.h

diff --git a/dlls/winebus.sys/Makefile.in b/dlls/winebus.sys/Makefile.in
index 8cde3c7b422..658d27b70fd 100644
--- a/dlls/winebus.sys/Makefile.in
+++ b/dlls/winebus.sys/Makefile.in
@@ -9,6 +9,7 @@ C_SRCS = \
 	bus_sdl.c \
 	bus_udev.c \
 	hid.c \
-	main.c
+	main.c \
+	unixlib.c
 
 RC_SRCS = winebus.rc
diff --git a/dlls/winebus.sys/main.c b/dlls/winebus.sys/main.c
index e372ec6db3f..fe0f6dc60cc 100644
--- a/dlls/winebus.sys/main.c
+++ b/dlls/winebus.sys/main.c
@@ -34,10 +34,14 @@
 #include "wine/list.h"
 
 #include "bus.h"
+#include "unixlib.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(plugplay);
 WINE_DECLARE_DEBUG_CHANNEL(hid_report);
 
+static HMODULE instance;
+static struct unix_funcs *unix_funcs;
+
 #if defined(__i386__) && !defined(_WIN32)
 
 extern void * WINAPI wrap_fastcall_func1( void *func, const void *a );
@@ -1071,6 +1075,7 @@ static NTSTATUS WINAPI driver_add_device(DRIVER_OBJECT *driver, DEVICE_OBJECT *p
 
 static void WINAPI driver_unload(DRIVER_OBJECT *driver)
 {
+    __wine_init_unix_lib(instance, DLL_PROCESS_DETACH, NULL, NULL);
     NtClose(driver_key);
 }
 
@@ -1081,6 +1086,10 @@ NTSTATUS WINAPI DriverEntry( DRIVER_OBJECT *driver, UNICODE_STRING *path )
 
     TRACE( "(%p, %s)\n", driver, debugstr_w(path->Buffer) );
 
+    RtlPcToFileHeader(&DriverEntry, (void *)&instance);
+    if ((ret = __wine_init_unix_lib(instance, DLL_PROCESS_ATTACH, NULL, &unix_funcs)))
+        return ret;
+
     attr.Length = sizeof(attr);
     attr.ObjectName = path;
     attr.Attributes = OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE;
diff --git a/dlls/winebus.sys/unixlib.c b/dlls/winebus.sys/unixlib.c
new file mode 100644
index 00000000000..1be740b34b8
--- /dev/null
+++ b/dlls/winebus.sys/unixlib.c
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2021 Rémi Bernon for CodeWeavers
+ *
+ * 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 "config.h"
+
+#include <stdarg.h>
+#include "ntstatus.h"
+#define WIN32_NO_STATUS
+#include "windef.h"
+#include "winbase.h"
+#include "winternl.h"
+
+#include "wine/debug.h"
+
+#include "unixlib.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(plugplay);
+
+static const struct unix_funcs unix_funcs =
+{
+};
+
+NTSTATUS CDECL __wine_init_unix_lib(HMODULE module, DWORD reason, const void *ptr_in, void *ptr_out)
+{
+    TRACE("module %p, reason %u, ptr_in %p, ptr_out %p\n", module, reason, ptr_in, ptr_out);
+
+    if (reason != DLL_PROCESS_ATTACH) return STATUS_SUCCESS;
+    *(const struct unix_funcs **)ptr_out = &unix_funcs;
+    return STATUS_SUCCESS;
+}
diff --git a/dlls/winebus.sys/unixlib.h b/dlls/winebus.sys/unixlib.h
new file mode 100644
index 00000000000..c220629ea87
--- /dev/null
+++ b/dlls/winebus.sys/unixlib.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2021 Rémi Bernon for CodeWeavers
+ *
+ * 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
+ */
+
+#ifndef __WINEBUS_UNIXLIB_H
+#define __WINEBUS_UNIXLIB_H
+
+#include <stdarg.h>
+
+#include <windef.h>
+#include <winbase.h>
+#include <winternl.h>
+#include <ddk/wdm.h>
+#include <hidusage.h>
+
+struct unix_funcs
+{
+};
+
+#endif /* __WINEBUS_UNIXLIB_H */
-- 
2.32.0




More information about the wine-devel mailing list