[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