mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2024-11-21 16:46:54 -08:00
Added mailing list patchset
This commit is contained in:
parent
e0bf5ac738
commit
5ed9211eab
2
patches/Compiler_Warnings/definition
Normal file
2
patches/Compiler_Warnings/definition
Normal file
@ -0,0 +1,2 @@
|
||||
Fixes: Fixes compile warnings.
|
||||
Depends: mailing-list-patches
|
@ -0,0 +1,67 @@
|
||||
From c7768e2ba1a86ba18c78115f2e6306dd2e08abf1 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Thu, 27 Jun 2019 22:30:12 -0500
|
||||
Subject: [PATCH] winebus.inf: Add new INF file and copy it to the INF
|
||||
directory.
|
||||
|
||||
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
|
||||
---
|
||||
loader/Makefile.in | 1 +
|
||||
loader/wine.inf.in | 1 +
|
||||
loader/winebus.inf.in | 22 ++++++++++++++++++++++
|
||||
3 files changed, 24 insertions(+)
|
||||
create mode 100644 loader/winebus.inf.in
|
||||
|
||||
diff --git a/loader/Makefile.in b/loader/Makefile.in
|
||||
index 3ada656408..11a476103c 100644
|
||||
--- a/loader/Makefile.in
|
||||
+++ b/loader/Makefile.in
|
||||
@@ -10,6 +10,7 @@ SOURCES = \
|
||||
wine.man.in \
|
||||
wine.pl.UTF-8.man.in \
|
||||
wine_info.plist.in \
|
||||
+ winebus.inf.in \
|
||||
winehid.inf.in
|
||||
|
||||
PROGRAMS = $(WINELOADER_PROGRAMS)
|
||||
diff --git a/loader/wine.inf.in b/loader/wine.inf.in
|
||||
index c3d3b770b5..63f8cb064e 100644
|
||||
--- a/loader/wine.inf.in
|
||||
+++ b/loader/wine.inf.in
|
||||
@@ -3691,4 +3691,5 @@ inf_section = 17
|
||||
l_intl.nls
|
||||
|
||||
[inf_section]
|
||||
+winebus.inf
|
||||
winehid.inf
|
||||
diff --git a/loader/winebus.inf.in b/loader/winebus.inf.in
|
||||
new file mode 100644
|
||||
index 0000000000..3950c3dfc4
|
||||
--- /dev/null
|
||||
+++ b/loader/winebus.inf.in
|
||||
@@ -0,0 +1,22 @@
|
||||
+[Version]
|
||||
+Signature="$CHICAGO$"
|
||||
+ClassGuid={4d36e97d-e325-11ce-bfc1-08002be10318}
|
||||
+Class=System
|
||||
+
|
||||
+[Manufacturer]
|
||||
+Wine=mfg_section
|
||||
+
|
||||
+[mfg_section]
|
||||
+Wine HID bus driver=device_section,root\winebus
|
||||
+
|
||||
+[device_section.Services]
|
||||
+AddService = winebus,0x2,svc_section
|
||||
+
|
||||
+[svc_section]
|
||||
+Description="Wine HID bus driver"
|
||||
+DisplayName="Wine HID bus"
|
||||
+ServiceBinary="%12%\winebus.sys"
|
||||
+LoadOrderGroup="WinePlugPlay"
|
||||
+ServiceType=1
|
||||
+StartType=3
|
||||
+ErrorControl=1
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,127 @@
|
||||
From f80abf3ac3b0ddc4937a50217c654af38a839560 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Thu, 27 Jun 2019 22:30:13 -0500
|
||||
Subject: [PATCH] winebus.sys: Implement AddDevice().
|
||||
|
||||
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
|
||||
---
|
||||
dlls/winebus.sys/main.c | 66 ++++++++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 65 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/winebus.sys/main.c b/dlls/winebus.sys/main.c
|
||||
index 89ea65bba6..d9ceb83760 100644
|
||||
--- a/dlls/winebus.sys/main.c
|
||||
+++ b/dlls/winebus.sys/main.c
|
||||
@@ -69,8 +69,12 @@ static const WORD PID_XBOX_CONTROLLERS[] = {
|
||||
|
||||
static DRIVER_OBJECT *driver_obj;
|
||||
|
||||
+
|
||||
static DEVICE_OBJECT *mouse_obj;
|
||||
|
||||
+/* The root-enumerated device stack. */
|
||||
+static DEVICE_OBJECT *bus_pdo, *bus_fdo;
|
||||
+
|
||||
HANDLE driver_key;
|
||||
|
||||
struct pnp_device
|
||||
@@ -469,7 +473,33 @@ static NTSTATUS handle_IRP_MN_QUERY_ID(DEVICE_OBJECT *device, IRP *irp)
|
||||
return status;
|
||||
}
|
||||
|
||||
-static NTSTATUS WINAPI common_pnp_dispatch(DEVICE_OBJECT *device, IRP *irp)
|
||||
+static NTSTATUS fdo_pnp_dispatch(DEVICE_OBJECT *device, IRP *irp)
|
||||
+{
|
||||
+ IO_STACK_LOCATION *irpsp = IoGetCurrentIrpStackLocation(irp);
|
||||
+ NTSTATUS ret;
|
||||
+
|
||||
+ switch (irpsp->MinorFunction)
|
||||
+ {
|
||||
+ case IRP_MN_START_DEVICE:
|
||||
+ case IRP_MN_SURPRISE_REMOVAL:
|
||||
+ irp->IoStatus.u.Status = STATUS_SUCCESS;
|
||||
+ break;
|
||||
+ case IRP_MN_REMOVE_DEVICE:
|
||||
+ irp->IoStatus.u.Status = STATUS_SUCCESS;
|
||||
+ IoSkipCurrentIrpStackLocation(irp);
|
||||
+ ret = IoCallDriver(bus_pdo, irp);
|
||||
+ IoDetachDevice(bus_pdo);
|
||||
+ IoDeleteDevice(device);
|
||||
+ return ret;
|
||||
+ default:
|
||||
+ FIXME("Unhandled minor function %#x.\n", irpsp->MinorFunction);
|
||||
+ }
|
||||
+
|
||||
+ IoSkipCurrentIrpStackLocation(irp);
|
||||
+ return IoCallDriver(bus_pdo, irp);
|
||||
+}
|
||||
+
|
||||
+static NTSTATUS pdo_pnp_dispatch(DEVICE_OBJECT *device, IRP *irp)
|
||||
{
|
||||
NTSTATUS status = irp->IoStatus.u.Status;
|
||||
IO_STACK_LOCATION *irpsp = IoGetCurrentIrpStackLocation(irp);
|
||||
@@ -498,6 +528,13 @@ static NTSTATUS WINAPI common_pnp_dispatch(DEVICE_OBJECT *device, IRP *irp)
|
||||
return status;
|
||||
}
|
||||
|
||||
+static NTSTATUS WINAPI common_pnp_dispatch(DEVICE_OBJECT *device, IRP *irp)
|
||||
+{
|
||||
+ if (device == bus_fdo)
|
||||
+ return fdo_pnp_dispatch(device, irp);
|
||||
+ return pdo_pnp_dispatch(device, irp);
|
||||
+}
|
||||
+
|
||||
static NTSTATUS deliver_last_report(struct device_extension *ext, DWORD buffer_length, BYTE* buffer, ULONG_PTR *out_length)
|
||||
{
|
||||
if (buffer_length < ext->last_report_size)
|
||||
@@ -522,6 +559,12 @@ static NTSTATUS WINAPI hid_internal_dispatch(DEVICE_OBJECT *device, IRP *irp)
|
||||
|
||||
TRACE("(%p, %p)\n", device, irp);
|
||||
|
||||
+ if (device == bus_fdo)
|
||||
+ {
|
||||
+ IoSkipCurrentIrpStackLocation(irp);
|
||||
+ return IoCallDriver(bus_pdo, irp);
|
||||
+ }
|
||||
+
|
||||
switch (irpsp->Parameters.DeviceIoControl.IoControlCode)
|
||||
{
|
||||
case IOCTL_HID_GET_DEVICE_ATTRIBUTES:
|
||||
@@ -764,6 +807,26 @@ BOOL is_xbox_gamepad(WORD vid, WORD pid)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
+static NTSTATUS WINAPI driver_add_device(DRIVER_OBJECT *driver, DEVICE_OBJECT *pdo)
|
||||
+{
|
||||
+ NTSTATUS ret;
|
||||
+
|
||||
+ TRACE("driver %p, pdo %p.\n", driver, pdo);
|
||||
+
|
||||
+ if ((ret = IoCreateDevice(driver, 0, NULL, FILE_DEVICE_BUS_EXTENDER, 0, FALSE, &bus_fdo)))
|
||||
+ {
|
||||
+ ERR("Failed to create FDO, status %#x.\n", ret);
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ IoAttachDeviceToDeviceStack(bus_fdo, pdo);
|
||||
+ bus_pdo = pdo;
|
||||
+
|
||||
+ bus_fdo->Flags &= ~DO_DEVICE_INITIALIZING;
|
||||
+
|
||||
+ return STATUS_SUCCESS;
|
||||
+}
|
||||
+
|
||||
static void WINAPI driver_unload(DRIVER_OBJECT *driver)
|
||||
{
|
||||
udev_driver_unload();
|
||||
@@ -861,6 +924,7 @@ NTSTATUS WINAPI DriverEntry( DRIVER_OBJECT *driver, UNICODE_STRING *path )
|
||||
|
||||
driver->MajorFunction[IRP_MJ_PNP] = common_pnp_dispatch;
|
||||
driver->MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = hid_internal_dispatch;
|
||||
+ driver->DriverExtension->AddDevice = driver_add_device;
|
||||
driver->DriverUnload = driver_unload;
|
||||
|
||||
mouse_device_create();
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,108 @@
|
||||
From 34c20aa62799b2e08cb751d040a4f1cc3b0b6894 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Thu, 27 Jun 2019 22:30:14 -0500
|
||||
Subject: [PATCH] wineboot: Create a root-enumerated device object for winebus.
|
||||
|
||||
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
|
||||
---
|
||||
programs/wineboot/Makefile.in | 2 +-
|
||||
programs/wineboot/wineboot.c | 56 +++++++++++++++++++++++++++++++++++
|
||||
2 files changed, 57 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/programs/wineboot/Makefile.in b/programs/wineboot/Makefile.in
|
||||
index eaea154057..3921fa9644 100644
|
||||
--- a/programs/wineboot/Makefile.in
|
||||
+++ b/programs/wineboot/Makefile.in
|
||||
@@ -1,7 +1,7 @@
|
||||
MODULE = wineboot.exe
|
||||
APPMODE = -mconsole
|
||||
IMPORTS = uuid advapi32
|
||||
-DELAYIMPORTS = shell32 shlwapi version user32
|
||||
+DELAYIMPORTS = shell32 shlwapi version user32 setupapi newdev
|
||||
|
||||
EXTRADLLFLAGS = -mno-cygwin
|
||||
|
||||
diff --git a/programs/wineboot/wineboot.c b/programs/wineboot/wineboot.c
|
||||
index 55f2c6ca0c..5190dcc701 100644
|
||||
--- a/programs/wineboot/wineboot.c
|
||||
+++ b/programs/wineboot/wineboot.c
|
||||
@@ -69,6 +69,8 @@
|
||||
#include <shobjidl.h>
|
||||
#include <shlwapi.h>
|
||||
#include <shellapi.h>
|
||||
+#include <setupapi.h>
|
||||
+#include <newdev.h>
|
||||
#include "resource.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(wineboot);
|
||||
@@ -1116,6 +1118,57 @@ static HANDLE start_rundll32( const WCHAR *inf_path, BOOL wow64 )
|
||||
return pi.hProcess;
|
||||
}
|
||||
|
||||
+static void install_root_pnp_devices(void)
|
||||
+{
|
||||
+ static const struct
|
||||
+ {
|
||||
+ const char *name;
|
||||
+ const char *hardware_id;
|
||||
+ const char *infpath;
|
||||
+ }
|
||||
+ root_devices[] =
|
||||
+ {
|
||||
+ {"root\\wine\\winebus", "root\\winebus\0", "C:\\windows\\inf\\winebus.inf"},
|
||||
+ };
|
||||
+ SP_DEVINFO_DATA device = {sizeof(device)};
|
||||
+ unsigned int i;
|
||||
+ HDEVINFO set;
|
||||
+
|
||||
+ if ((set = SetupDiCreateDeviceInfoList( NULL, NULL )) == INVALID_HANDLE_VALUE)
|
||||
+ {
|
||||
+ WINE_ERR("Failed to create device info list, error %#x.\n", GetLastError());
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(root_devices); ++i)
|
||||
+ {
|
||||
+ if (!SetupDiCreateDeviceInfoA( set, root_devices[i].name, &GUID_NULL, NULL, NULL, 0, &device))
|
||||
+ {
|
||||
+ if (GetLastError() != ERROR_DEVINST_ALREADY_EXISTS)
|
||||
+ WINE_ERR("Failed to create device %s, error %#x.\n", debugstr_a(root_devices[i].name), GetLastError());
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ if (!SetupDiSetDeviceRegistryPropertyA(set, &device, SPDRP_HARDWAREID,
|
||||
+ (const BYTE *)root_devices[i].hardware_id, (strlen(root_devices[i].hardware_id) + 2) * sizeof(WCHAR)))
|
||||
+ {
|
||||
+ WINE_ERR("Failed to set hardware id for %s, error %#x.\n", debugstr_a(root_devices[i].name), GetLastError());
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ if (!SetupDiCallClassInstaller(DIF_REGISTERDEVICE, set, &device))
|
||||
+ {
|
||||
+ WINE_ERR("Failed to register device %s, error %#x.\n", debugstr_a(root_devices[i].name), GetLastError());
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ if (!UpdateDriverForPlugAndPlayDevicesA(NULL, root_devices[i].hardware_id, root_devices[i].infpath, 0, NULL))
|
||||
+ WINE_ERR("Failed to install drivers for %s, error %#x.\n", debugstr_a(root_devices[i].name), GetLastError());
|
||||
+ }
|
||||
+
|
||||
+ SetupDiDestroyDeviceInfoList(set);
|
||||
+}
|
||||
+
|
||||
/* execute rundll32 on the wine.inf file if necessary */
|
||||
static void update_wineprefix( BOOL force )
|
||||
{
|
||||
@@ -1159,6 +1212,9 @@ static void update_wineprefix( BOOL force )
|
||||
}
|
||||
DestroyWindow( hwnd );
|
||||
}
|
||||
+
|
||||
+ install_root_pnp_devices();
|
||||
+
|
||||
WINE_MESSAGE( "wine: configuration in '%s' has been updated.\n", prettyprint_configdir() );
|
||||
}
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,85 @@
|
||||
From cf2328c46895754b40bf6017d2c300f7a153d0c4 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Thu, 27 Jun 2019 22:30:16 -0500
|
||||
Subject: [PATCH] winebus.sys: Initialize and teardown the HID backends while
|
||||
the bus FDO is still extant.
|
||||
|
||||
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
|
||||
---
|
||||
dlls/winebus.sys/main.c | 30 +++++++++++++++---------------
|
||||
1 file changed, 15 insertions(+), 15 deletions(-)
|
||||
|
||||
diff --git a/dlls/winebus.sys/main.c b/dlls/winebus.sys/main.c
|
||||
index d9ceb83760..b96e38c538 100644
|
||||
--- a/dlls/winebus.sys/main.c
|
||||
+++ b/dlls/winebus.sys/main.c
|
||||
@@ -475,16 +475,31 @@ static NTSTATUS handle_IRP_MN_QUERY_ID(DEVICE_OBJECT *device, IRP *irp)
|
||||
|
||||
static NTSTATUS fdo_pnp_dispatch(DEVICE_OBJECT *device, IRP *irp)
|
||||
{
|
||||
+ static const WCHAR SDL_enabledW[] = {'E','n','a','b','l','e',' ','S','D','L',0};
|
||||
+ static const UNICODE_STRING SDL_enabled = {sizeof(SDL_enabledW) - sizeof(WCHAR), sizeof(SDL_enabledW), (WCHAR*)SDL_enabledW};
|
||||
IO_STACK_LOCATION *irpsp = IoGetCurrentIrpStackLocation(irp);
|
||||
NTSTATUS ret;
|
||||
|
||||
switch (irpsp->MinorFunction)
|
||||
{
|
||||
case IRP_MN_START_DEVICE:
|
||||
+ if (check_bus_option(&SDL_enabled, 1))
|
||||
+ {
|
||||
+ if (sdl_driver_init() == STATUS_SUCCESS)
|
||||
+ return STATUS_SUCCESS;
|
||||
+ }
|
||||
+ udev_driver_init();
|
||||
+ iohid_driver_init();
|
||||
+ irp->IoStatus.u.Status = STATUS_SUCCESS;
|
||||
+ break;
|
||||
case IRP_MN_SURPRISE_REMOVAL:
|
||||
irp->IoStatus.u.Status = STATUS_SUCCESS;
|
||||
break;
|
||||
case IRP_MN_REMOVE_DEVICE:
|
||||
+ udev_driver_unload();
|
||||
+ iohid_driver_unload();
|
||||
+ sdl_driver_unload();
|
||||
+
|
||||
irp->IoStatus.u.Status = STATUS_SUCCESS;
|
||||
IoSkipCurrentIrpStackLocation(irp);
|
||||
ret = IoCallDriver(bus_pdo, irp);
|
||||
@@ -829,9 +844,6 @@ static NTSTATUS WINAPI driver_add_device(DRIVER_OBJECT *driver, DEVICE_OBJECT *p
|
||||
|
||||
static void WINAPI driver_unload(DRIVER_OBJECT *driver)
|
||||
{
|
||||
- udev_driver_unload();
|
||||
- iohid_driver_unload();
|
||||
- sdl_driver_unload();
|
||||
NtClose(driver_key);
|
||||
}
|
||||
|
||||
@@ -907,8 +919,6 @@ static void mouse_device_create(void)
|
||||
|
||||
NTSTATUS WINAPI DriverEntry( DRIVER_OBJECT *driver, UNICODE_STRING *path )
|
||||
{
|
||||
- static const WCHAR SDL_enabledW[] = {'E','n','a','b','l','e',' ','S','D','L',0};
|
||||
- static const UNICODE_STRING SDL_enabled = {sizeof(SDL_enabledW) - sizeof(WCHAR), sizeof(SDL_enabledW), (WCHAR*)SDL_enabledW};
|
||||
OBJECT_ATTRIBUTES attr = {0};
|
||||
NTSTATUS ret;
|
||||
|
||||
@@ -927,15 +937,5 @@ NTSTATUS WINAPI DriverEntry( DRIVER_OBJECT *driver, UNICODE_STRING *path )
|
||||
driver->DriverExtension->AddDevice = driver_add_device;
|
||||
driver->DriverUnload = driver_unload;
|
||||
|
||||
- mouse_device_create();
|
||||
-
|
||||
- if (check_bus_option(&SDL_enabled, 1))
|
||||
- {
|
||||
- if (sdl_driver_init() == STATUS_SUCCESS)
|
||||
- return STATUS_SUCCESS;
|
||||
- }
|
||||
- udev_driver_init();
|
||||
- iohid_driver_init();
|
||||
-
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,285 @@
|
||||
From cdc9b0c079ab9001800e97d2b6303f743f8c2175 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <z.figura12@gmail.com>
|
||||
Date: Thu, 27 Jun 2019 22:30:17 -0500
|
||||
Subject: [PATCH] ntoskrnl.exe: IoInvalidateDeviceRelations() receives the
|
||||
parent PDO.
|
||||
|
||||
Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
|
||||
---
|
||||
dlls/ntoskrnl.exe/ntoskrnl.c | 8 ++-
|
||||
dlls/ntoskrnl.exe/ntoskrnl_private.h | 6 ++
|
||||
dlls/ntoskrnl.exe/pnp.c | 86 ++++++++++++++++++++++++----
|
||||
dlls/winebus.sys/bus.h | 1 +
|
||||
dlls/winebus.sys/bus_iohid.c | 2 +-
|
||||
dlls/winebus.sys/bus_sdl.c | 2 +-
|
||||
dlls/winebus.sys/bus_udev.c | 2 +-
|
||||
dlls/winebus.sys/main.c | 11 ++--
|
||||
8 files changed, 97 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
|
||||
index 92f9afab33..620f9572da 100644
|
||||
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
|
||||
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
|
||||
@@ -1469,6 +1469,7 @@ NTSTATUS WINAPI IoCreateDevice( DRIVER_OBJECT *driver, ULONG ext_size,
|
||||
{
|
||||
static const WCHAR auto_format[] = {'\\','D','e','v','i','c','e','\\','%','0','8','x',0};
|
||||
NTSTATUS status;
|
||||
+ struct wine_device *wine_device;
|
||||
DEVICE_OBJECT *device;
|
||||
HANDLE manager = get_device_manager();
|
||||
static unsigned int auto_idx = 0;
|
||||
@@ -1477,11 +1478,12 @@ NTSTATUS WINAPI IoCreateDevice( DRIVER_OBJECT *driver, ULONG ext_size,
|
||||
TRACE( "(%p, %u, %s, %u, %x, %u, %p)\n",
|
||||
driver, ext_size, debugstr_us(name), type, characteristics, exclusive, ret_device );
|
||||
|
||||
- if (!(device = alloc_kernel_object( IoDeviceObjectType, NULL, sizeof(DEVICE_OBJECT) + ext_size, 1 )))
|
||||
+ if (!(wine_device = alloc_kernel_object( IoDeviceObjectType, NULL, sizeof(struct wine_device) + ext_size, 1 )))
|
||||
return STATUS_NO_MEMORY;
|
||||
+ device = &wine_device->device_obj;
|
||||
|
||||
device->DriverObject = driver;
|
||||
- device->DeviceExtension = device + 1;
|
||||
+ device->DeviceExtension = wine_device + 1;
|
||||
device->DeviceType = type;
|
||||
device->StackSize = 1;
|
||||
|
||||
@@ -1547,9 +1549,11 @@ void WINAPI IoDeleteDevice( DEVICE_OBJECT *device )
|
||||
|
||||
if (status == STATUS_SUCCESS)
|
||||
{
|
||||
+ struct wine_device *wine_device = CONTAINING_RECORD(device, struct wine_device, device_obj);
|
||||
DEVICE_OBJECT **prev = &device->DriverObject->DeviceObject;
|
||||
while (*prev && *prev != device) prev = &(*prev)->NextDevice;
|
||||
if (*prev) *prev = (*prev)->NextDevice;
|
||||
+ ExFreePool( wine_device->children );
|
||||
ObDereferenceObject( device );
|
||||
}
|
||||
}
|
||||
diff --git a/dlls/ntoskrnl.exe/ntoskrnl_private.h b/dlls/ntoskrnl.exe/ntoskrnl_private.h
|
||||
index b5244ef164..256e945e6f 100644
|
||||
--- a/dlls/ntoskrnl.exe/ntoskrnl_private.h
|
||||
+++ b/dlls/ntoskrnl.exe/ntoskrnl_private.h
|
||||
@@ -86,4 +86,10 @@ static const WCHAR servicesW[] = {'\\','R','e','g','i','s','t','r','y',
|
||||
'\\','C','u','r','r','e','n','t','C','o','n','t','r','o','l','S','e','t',
|
||||
'\\','S','e','r','v','i','c','e','s',
|
||||
'\\',0};
|
||||
+
|
||||
+struct wine_device
|
||||
+{
|
||||
+ DEVICE_OBJECT device_obj;
|
||||
+ DEVICE_RELATIONS *children;
|
||||
+};
|
||||
#endif
|
||||
diff --git a/dlls/ntoskrnl.exe/pnp.c b/dlls/ntoskrnl.exe/pnp.c
|
||||
index 30865a05dc..c618885d42 100644
|
||||
--- a/dlls/ntoskrnl.exe/pnp.c
|
||||
+++ b/dlls/ntoskrnl.exe/pnp.c
|
||||
@@ -316,25 +316,18 @@ static void start_device( DEVICE_OBJECT *device, HDEVINFO set, SP_DEVINFO_DATA *
|
||||
}
|
||||
}
|
||||
|
||||
-static void handle_bus_relations( DEVICE_OBJECT *device )
|
||||
+static void enumerate_new_device( DEVICE_OBJECT *device, HDEVINFO set )
|
||||
{
|
||||
static const WCHAR infpathW[] = {'I','n','f','P','a','t','h',0};
|
||||
|
||||
SP_DEVINFO_DATA sp_device = {sizeof(sp_device)};
|
||||
WCHAR device_instance_id[MAX_DEVICE_ID_LEN];
|
||||
BOOL need_driver = TRUE;
|
||||
- HDEVINFO set;
|
||||
HKEY key;
|
||||
|
||||
- /* We could (should?) do a full IRP_MN_QUERY_DEVICE_RELATIONS query,
|
||||
- * but we don't have to, we have the DEVICE_OBJECT of the new device
|
||||
- * so we can simply handle the process here */
|
||||
-
|
||||
if (get_device_instance_id( device, device_instance_id ))
|
||||
return;
|
||||
|
||||
- set = SetupDiCreateDeviceInfoList( NULL, NULL );
|
||||
-
|
||||
if (!SetupDiCreateDeviceInfoW( set, device_instance_id, &GUID_NULL, NULL, NULL, 0, &sp_device )
|
||||
&& !SetupDiOpenDeviceInfoW( set, device_instance_id, NULL, 0, &sp_device ))
|
||||
{
|
||||
@@ -362,19 +355,92 @@ static void handle_bus_relations( DEVICE_OBJECT *device )
|
||||
}
|
||||
|
||||
start_device( device, set, &sp_device );
|
||||
-
|
||||
- SetupDiDestroyDeviceInfoList( set );
|
||||
}
|
||||
|
||||
static void remove_device( DEVICE_OBJECT *device )
|
||||
{
|
||||
+ struct wine_device *wine_device = CONTAINING_RECORD(device, struct wine_device, device_obj);
|
||||
+
|
||||
TRACE("Removing device %p.\n", device);
|
||||
|
||||
+ if (wine_device->children)
|
||||
+ {
|
||||
+ ULONG i;
|
||||
+ for (i = 0; i < wine_device->children->Count; ++i)
|
||||
+ remove_device( wine_device->children->Objects[i] );
|
||||
+ }
|
||||
+
|
||||
send_power_irp( device, PowerDeviceD3 );
|
||||
send_pnp_irp( device, IRP_MN_SURPRISE_REMOVAL );
|
||||
send_pnp_irp( device, IRP_MN_REMOVE_DEVICE );
|
||||
}
|
||||
|
||||
+static BOOL device_in_list( const DEVICE_RELATIONS *list, const DEVICE_OBJECT *device )
|
||||
+{
|
||||
+ ULONG i;
|
||||
+ for (i = 0; i < list->Count; ++i)
|
||||
+ {
|
||||
+ if (list->Objects[i] == device)
|
||||
+ return TRUE;
|
||||
+ }
|
||||
+ return FALSE;
|
||||
+}
|
||||
+
|
||||
+static void handle_bus_relations( DEVICE_OBJECT *parent )
|
||||
+{
|
||||
+ struct wine_device *wine_parent = CONTAINING_RECORD(parent, struct wine_device, device_obj);
|
||||
+ SP_DEVINFO_DATA sp_device = {sizeof(sp_device)};
|
||||
+ DEVICE_RELATIONS *relations;
|
||||
+ IO_STATUS_BLOCK irp_status;
|
||||
+ IO_STACK_LOCATION *irpsp;
|
||||
+ NTSTATUS status;
|
||||
+ HDEVINFO set;
|
||||
+ IRP *irp;
|
||||
+ ULONG i;
|
||||
+
|
||||
+ TRACE( "(%p)\n", parent );
|
||||
+
|
||||
+ set = SetupDiCreateDeviceInfoList( NULL, NULL );
|
||||
+
|
||||
+ parent = IoGetAttachedDevice( parent );
|
||||
+
|
||||
+ if (!(irp = IoBuildSynchronousFsdRequest( IRP_MJ_PNP, parent, NULL, 0, NULL, NULL, &irp_status )))
|
||||
+ {
|
||||
+ SetupDiDestroyDeviceInfoList( set );
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ irpsp = IoGetNextIrpStackLocation( irp );
|
||||
+ irpsp->MinorFunction = IRP_MN_QUERY_DEVICE_RELATIONS;
|
||||
+ irpsp->Parameters.QueryDeviceRelations.Type = BusRelations;
|
||||
+ if ((status = send_device_irp( parent, irp, (ULONG_PTR *)&relations )))
|
||||
+ {
|
||||
+ ERR("Failed to enumerate child devices, status %#x.\n", status);
|
||||
+ SetupDiDestroyDeviceInfoList( set );
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ TRACE("Got %u devices.\n", relations->Count);
|
||||
+
|
||||
+ for (i = 0; i < relations->Count; ++i)
|
||||
+ {
|
||||
+ DEVICE_OBJECT *child = relations->Objects[i];
|
||||
+
|
||||
+ TRACE("%p, %p\n", wine_parent, wine_parent->children);
|
||||
+
|
||||
+ if (!wine_parent->children || !device_in_list( wine_parent->children, child ))
|
||||
+ {
|
||||
+ TRACE("Adding new device %p.\n", child);
|
||||
+ enumerate_new_device( child, set );
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ ExFreePool( wine_parent->children );
|
||||
+ wine_parent->children = relations;
|
||||
+
|
||||
+ SetupDiDestroyDeviceInfoList( set );
|
||||
+}
|
||||
+
|
||||
/***********************************************************************
|
||||
* IoInvalidateDeviceRelations (NTOSKRNL.EXE.@)
|
||||
*/
|
||||
diff --git a/dlls/winebus.sys/bus.h b/dlls/winebus.sys/bus.h
|
||||
index de8ddf7ad9..a250878489 100644
|
||||
--- a/dlls/winebus.sys/bus.h
|
||||
+++ b/dlls/winebus.sys/bus.h
|
||||
@@ -54,3 +54,4 @@ DWORD check_bus_option(const UNICODE_STRING *option, DWORD default_value) DECLSP
|
||||
BOOL is_xbox_gamepad(WORD vid, WORD pid) DECLSPEC_HIDDEN;
|
||||
|
||||
HANDLE driver_key DECLSPEC_HIDDEN;
|
||||
+DEVICE_OBJECT *bus_pdo DECLSPEC_HIDDEN;
|
||||
diff --git a/dlls/winebus.sys/bus_iohid.c b/dlls/winebus.sys/bus_iohid.c
|
||||
index 7933374007..e992db8376 100644
|
||||
--- a/dlls/winebus.sys/bus_iohid.c
|
||||
+++ b/dlls/winebus.sys/bus_iohid.c
|
||||
@@ -357,7 +357,7 @@ static void handle_DeviceMatchingCallback(void *context, IOReturn result, void *
|
||||
struct platform_private *private = impl_from_DEVICE_OBJECT(device);
|
||||
private->device = IOHIDDevice;
|
||||
private->buffer = NULL;
|
||||
- IoInvalidateDeviceRelations(device, BusRelations);
|
||||
+ IoInvalidateDeviceRelations(bus_pdo, BusRelations);
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/dlls/winebus.sys/bus_sdl.c b/dlls/winebus.sys/bus_sdl.c
|
||||
index d24e21cff8..781deda767 100644
|
||||
--- a/dlls/winebus.sys/bus_sdl.c
|
||||
+++ b/dlls/winebus.sys/bus_sdl.c
|
||||
@@ -988,7 +988,7 @@ static void try_add_device(SDL_JoystickID index)
|
||||
HeapFree(GetProcessHeap(), 0, serial);
|
||||
return;
|
||||
}
|
||||
- IoInvalidateDeviceRelations(device, BusRelations);
|
||||
+ IoInvalidateDeviceRelations(bus_pdo, BusRelations);
|
||||
}
|
||||
else
|
||||
{
|
||||
diff --git a/dlls/winebus.sys/bus_udev.c b/dlls/winebus.sys/bus_udev.c
|
||||
index 08ad8765af..9a3df9ea6b 100644
|
||||
--- a/dlls/winebus.sys/bus_udev.c
|
||||
+++ b/dlls/winebus.sys/bus_udev.c
|
||||
@@ -1241,7 +1241,7 @@ static void try_add_device(struct udev_device *dev)
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
- IoInvalidateDeviceRelations(device, BusRelations);
|
||||
+ IoInvalidateDeviceRelations(bus_pdo, BusRelations);
|
||||
}
|
||||
else
|
||||
{
|
||||
diff --git a/dlls/winebus.sys/main.c b/dlls/winebus.sys/main.c
|
||||
index b96e38c538..26200bde3e 100644
|
||||
--- a/dlls/winebus.sys/main.c
|
||||
+++ b/dlls/winebus.sys/main.c
|
||||
@@ -73,7 +73,8 @@ static DRIVER_OBJECT *driver_obj;
|
||||
static DEVICE_OBJECT *mouse_obj;
|
||||
|
||||
/* The root-enumerated device stack. */
|
||||
-static DEVICE_OBJECT *bus_pdo, *bus_fdo;
|
||||
+DEVICE_OBJECT *bus_pdo;
|
||||
+static DEVICE_OBJECT *bus_fdo;
|
||||
|
||||
HANDLE driver_key;
|
||||
|
||||
@@ -482,6 +483,9 @@ static NTSTATUS fdo_pnp_dispatch(DEVICE_OBJECT *device, IRP *irp)
|
||||
|
||||
switch (irpsp->MinorFunction)
|
||||
{
|
||||
+ case IRP_MN_QUERY_DEVICE_RELATIONS:
|
||||
+ irp->IoStatus.u.Status = handle_IRP_MN_QUERY_DEVICE_RELATIONS(irp);
|
||||
+ break;
|
||||
case IRP_MN_START_DEVICE:
|
||||
if (check_bus_option(&SDL_enabled, 1))
|
||||
{
|
||||
@@ -521,11 +525,6 @@ static NTSTATUS pdo_pnp_dispatch(DEVICE_OBJECT *device, IRP *irp)
|
||||
|
||||
switch (irpsp->MinorFunction)
|
||||
{
|
||||
- case IRP_MN_QUERY_DEVICE_RELATIONS:
|
||||
- TRACE("IRP_MN_QUERY_DEVICE_RELATIONS\n");
|
||||
- status = handle_IRP_MN_QUERY_DEVICE_RELATIONS(irp);
|
||||
- irp->IoStatus.u.Status = status;
|
||||
- break;
|
||||
case IRP_MN_QUERY_ID:
|
||||
TRACE("IRP_MN_QUERY_ID\n");
|
||||
status = handle_IRP_MN_QUERY_ID(device, irp);
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,218 @@
|
||||
From 43d1b91c72b4151422bfd642ddf538f71935a78b Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Timoshkov <dmitry@baikal.ru>
|
||||
Date: Fri, 5 Jul 2019 13:20:23 +0800
|
||||
Subject: [PATCH] cryptext: Implement CryptExtOpenCER.
|
||||
|
||||
Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru>
|
||||
---
|
||||
configure.ac | 1 +
|
||||
dlls/cryptext/Makefile.in | 3 +-
|
||||
dlls/cryptext/cryptext.spec | 4 +--
|
||||
dlls/cryptext/cryptext_main.c | 64 +++++++++++++++++++++++++++++++++
|
||||
dlls/cryptext/tests/Makefile.in | 4 +++
|
||||
dlls/cryptext/tests/cryptext.c | 61 +++++++++++++++++++++++++++++++
|
||||
6 files changed, 134 insertions(+), 3 deletions(-)
|
||||
create mode 100644 dlls/cryptext/tests/Makefile.in
|
||||
create mode 100644 dlls/cryptext/tests/cryptext.c
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index a7c45ace73..e801c35c46 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3049,6 +3049,7 @@ WINE_CONFIG_MAKEFILE(dlls/crypt32/tests)
|
||||
WINE_CONFIG_MAKEFILE(dlls/cryptdlg)
|
||||
WINE_CONFIG_MAKEFILE(dlls/cryptdll)
|
||||
WINE_CONFIG_MAKEFILE(dlls/cryptext)
|
||||
+WINE_CONFIG_MAKEFILE(dlls/cryptext/tests)
|
||||
WINE_CONFIG_MAKEFILE(dlls/cryptnet)
|
||||
WINE_CONFIG_MAKEFILE(dlls/cryptnet/tests)
|
||||
WINE_CONFIG_MAKEFILE(dlls/cryptui)
|
||||
diff --git a/dlls/cryptext/Makefile.in b/dlls/cryptext/Makefile.in
|
||||
index 9c9f84cee8..0e817ffda6 100644
|
||||
--- a/dlls/cryptext/Makefile.in
|
||||
+++ b/dlls/cryptext/Makefile.in
|
||||
@@ -1,4 +1,5 @@
|
||||
-MODULE = cryptext.dll
|
||||
+MODULE = cryptext.dll
|
||||
+IMPORTS = crypt32 cryptui user32
|
||||
|
||||
EXTRADLLFLAGS = -mno-cygwin
|
||||
|
||||
diff --git a/dlls/cryptext/cryptext.spec b/dlls/cryptext/cryptext.spec
|
||||
index 0dba38e393..911ab2f4ba 100644
|
||||
--- a/dlls/cryptext/cryptext.spec
|
||||
+++ b/dlls/cryptext/cryptext.spec
|
||||
@@ -12,8 +12,8 @@
|
||||
@ stub CryptExtAddSPCW
|
||||
@ stub CryptExtOpenCAT
|
||||
@ stub CryptExtOpenCATW
|
||||
-@ stub CryptExtOpenCER
|
||||
-@ stub CryptExtOpenCERW
|
||||
+@ stdcall CryptExtOpenCER(long ptr str long)
|
||||
+@ stdcall CryptExtOpenCERW(long ptr wstr long)
|
||||
@ stub CryptExtOpenCRL
|
||||
@ stub CryptExtOpenCRLW
|
||||
@ stub CryptExtOpenCTL
|
||||
diff --git a/dlls/cryptext/cryptext_main.c b/dlls/cryptext/cryptext_main.c
|
||||
index f7c7bd1f55..2a381782d6 100644
|
||||
--- a/dlls/cryptext/cryptext_main.c
|
||||
+++ b/dlls/cryptext/cryptext_main.c
|
||||
@@ -22,10 +22,29 @@
|
||||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
+#include "winnls.h"
|
||||
+#include "wincrypt.h"
|
||||
+#include "winuser.h"
|
||||
+#include "cryptuiapi.h"
|
||||
+
|
||||
+#include "wine/heap.h"
|
||||
#include "wine/debug.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(cryptext);
|
||||
|
||||
+static WCHAR *heap_strdupAtoW(const char *str)
|
||||
+{
|
||||
+ WCHAR *ret;
|
||||
+ INT len;
|
||||
+
|
||||
+ if (!str) return NULL;
|
||||
+ len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
|
||||
+ ret = heap_alloc(len * sizeof(WCHAR));
|
||||
+ if (ret)
|
||||
+ MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
|
||||
{
|
||||
TRACE("(%p, %u, %p)\n", instance, reason, reserved);
|
||||
@@ -59,3 +78,48 @@ HRESULT WINAPI CryptExtAddPFXW(LPCWSTR filename)
|
||||
FIXME("stub: %s\n", debugstr_w(filename));
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
+
|
||||
+/***********************************************************************
|
||||
+ * CryptExtOpenCERW (CRYPTEXT.@)
|
||||
+ */
|
||||
+HRESULT WINAPI CryptExtOpenCERW(HWND hwnd, HINSTANCE hinst, LPCWSTR filename, DWORD showcmd)
|
||||
+{
|
||||
+ PCCERT_CONTEXT ctx;
|
||||
+ CRYPTUI_VIEWCERTIFICATE_STRUCTW info;
|
||||
+
|
||||
+ TRACE("(%p, %p, %s, %u)\n", hwnd, hinst, debugstr_w(filename), showcmd);
|
||||
+
|
||||
+ if (!CryptQueryObject(CERT_QUERY_OBJECT_FILE, filename, CERT_QUERY_CONTENT_FLAG_CERT,
|
||||
+ CERT_QUERY_FORMAT_FLAG_ALL, 0, NULL, NULL, NULL, NULL, NULL,
|
||||
+ (const void **)&ctx))
|
||||
+ {
|
||||
+ /* FIXME: move to the resources */
|
||||
+ static const WCHAR msg[] = {'T','h','i','s',' ','i','s',' ','n','o','t',' ','a',' ','v','a','l','i','d',' ','c','e','r','t','i','f','i','c','a','t','e',0};
|
||||
+ MessageBoxW(NULL, msg, filename, MB_OK | MB_ICONERROR);
|
||||
+ return S_OK; /* according to the tests */
|
||||
+ }
|
||||
+
|
||||
+ memset(&info, 0, sizeof(info));
|
||||
+ info.dwSize = sizeof(info);
|
||||
+ info.pCertContext = ctx;
|
||||
+ CryptUIDlgViewCertificateW(&info, NULL);
|
||||
+ CertFreeCertificateContext(ctx);
|
||||
+
|
||||
+ return S_OK;
|
||||
+}
|
||||
+
|
||||
+/***********************************************************************
|
||||
+ * CryptExtOpenCER (CRYPTEXT.@)
|
||||
+ */
|
||||
+HRESULT WINAPI CryptExtOpenCER(HWND hwnd, HINSTANCE hinst, LPCSTR filename, DWORD showcmd)
|
||||
+{
|
||||
+ HRESULT hr;
|
||||
+ LPWSTR filenameW;
|
||||
+
|
||||
+ TRACE("(%p, %p, %s, %u)\n", hwnd, hinst, debugstr_a(filename), showcmd);
|
||||
+
|
||||
+ filenameW = heap_strdupAtoW(filename);
|
||||
+ hr = CryptExtOpenCERW(hwnd, hinst, filenameW, showcmd);
|
||||
+ heap_free(filenameW);
|
||||
+ return hr;
|
||||
+}
|
||||
diff --git a/dlls/cryptext/tests/Makefile.in b/dlls/cryptext/tests/Makefile.in
|
||||
new file mode 100644
|
||||
index 0000000000..522fc60a4a
|
||||
--- /dev/null
|
||||
+++ b/dlls/cryptext/tests/Makefile.in
|
||||
@@ -0,0 +1,4 @@
|
||||
+TESTDLL = cryptext.dll
|
||||
+
|
||||
+C_SRCS = \
|
||||
+ cryptext.c
|
||||
diff --git a/dlls/cryptext/tests/cryptext.c b/dlls/cryptext/tests/cryptext.c
|
||||
new file mode 100644
|
||||
index 0000000000..cc62a772b5
|
||||
--- /dev/null
|
||||
+++ b/dlls/cryptext/tests/cryptext.c
|
||||
@@ -0,0 +1,61 @@
|
||||
+/*
|
||||
+ * Copyright 2019 Dmitry Timoshkov
|
||||
+ *
|
||||
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
+ */
|
||||
+
|
||||
+#include <stdarg.h>
|
||||
+#include <assert.h>
|
||||
+#include <windef.h>
|
||||
+#include <winbase.h>
|
||||
+#include <winuser.h>
|
||||
+#include <winerror.h>
|
||||
+
|
||||
+#include "wine/test.h"
|
||||
+
|
||||
+static HRESULT (WINAPI *pCryptExtOpenCER)(HWND,HINSTANCE,LPCSTR,DWORD);
|
||||
+
|
||||
+static void test_CryptExtOpenCER(void)
|
||||
+{
|
||||
+ HRESULT hr;
|
||||
+
|
||||
+ if (!pCryptExtOpenCER)
|
||||
+ {
|
||||
+ win_skip("CryptExtOpenCER is not available on this platform\n");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ if (!winetest_interactive)
|
||||
+ {
|
||||
+ skip("CryptExtOpenCER test needs user interaction\n");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ SetLastError(0xdeadbeef);
|
||||
+ hr = pCryptExtOpenCER(0, 0, "dead.beef", SW_HIDE);
|
||||
+ ok(hr == S_OK, "got %#x\n", hr);
|
||||
+
|
||||
+ hr = pCryptExtOpenCER(0, 0, "VeriSign Class 3 Public Primary Certification Authority - G4.txt", SW_SHOW);
|
||||
+ ok(hr == S_OK, "got %#x\n", hr);
|
||||
+}
|
||||
+
|
||||
+START_TEST(cryptext)
|
||||
+{
|
||||
+ HMODULE hmod = LoadLibraryA("cryptext.dll");
|
||||
+
|
||||
+ pCryptExtOpenCER = (void *)GetProcAddress(hmod, "CryptExtOpenCER");
|
||||
+
|
||||
+ test_CryptExtOpenCER();
|
||||
+}
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,48 @@
|
||||
From d8c945b3d420e284fd4a8eda4879202ace7e712e Mon Sep 17 00:00:00 2001
|
||||
From: Zhiyi Zhang <zzhang@codeweavers.com>
|
||||
Date: Mon, 8 Jul 2019 22:15:59 +0800
|
||||
Subject: [PATCH] dxgi/tests: Test output after using Alt+Enter to switch
|
||||
fullscreen.
|
||||
|
||||
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
|
||||
Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
|
||||
---
|
||||
dlls/dxgi/tests/dxgi.c | 9 +++++++--
|
||||
1 file changed, 7 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/dxgi/tests/dxgi.c b/dlls/dxgi/tests/dxgi.c
|
||||
index d8176bb1c0..38aeba17bd 100644
|
||||
--- a/dlls/dxgi/tests/dxgi.c
|
||||
+++ b/dlls/dxgi/tests/dxgi.c
|
||||
@@ -5306,6 +5306,7 @@ static void test_window_association(void)
|
||||
LONG_PTR original_wndproc, wndproc;
|
||||
IDXGIFactory *factory, *factory2;
|
||||
IDXGISwapChain *swapchain;
|
||||
+ IDXGIOutput *output;
|
||||
IDXGIAdapter *adapter;
|
||||
IDXGIDevice *device;
|
||||
HWND hwnd, hwnd2;
|
||||
@@ -5449,14 +5450,18 @@ static void test_window_association(void)
|
||||
PostMessageA(swapchain_desc.OutputWindow, WM_SYSKEYDOWN, VK_RETURN,
|
||||
(MapVirtualKeyA(VK_RETURN, MAPVK_VK_TO_VSC) << 16) | 0x20000001);
|
||||
flush_events();
|
||||
- hr = IDXGISwapChain_GetFullscreenState(swapchain, &fullscreen, NULL);
|
||||
+ output = NULL;
|
||||
+ hr = IDXGISwapChain_GetFullscreenState(swapchain, &fullscreen, &output);
|
||||
ok(hr == S_OK, "Test %u: Got unexpected hr %#x.\n", i, hr);
|
||||
ok(fullscreen == tests[i].expect_fullscreen
|
||||
|| broken(tests[i].broken_d3d10 && fullscreen),
|
||||
"Test %u: Got unexpected fullscreen %#x.\n", i, fullscreen);
|
||||
+ todo_wine_if(fullscreen) ok(fullscreen ? !!output : !output, "Test %u: Got wrong output.\n", i);
|
||||
+ if (output)
|
||||
+ IDXGIOutput_Release(output);
|
||||
|
||||
wndproc = GetWindowLongPtrW(swapchain_desc.OutputWindow, GWLP_WNDPROC);
|
||||
- ok(wndproc == original_wndproc, "Text %u: Got unexpected wndproc %#lx, expected %#lx.\n",
|
||||
+ ok(wndproc == original_wndproc, "Test %u: Got unexpected wndproc %#lx, expected %#lx.\n",
|
||||
i, wndproc, original_wndproc);
|
||||
}
|
||||
}
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,76 @@
|
||||
From a26681c535b622ef02ae588fa58b86e95b2a581c Mon Sep 17 00:00:00 2001
|
||||
From: Zhiyi Zhang <zzhang@codeweavers.com>
|
||||
Date: Mon, 8 Jul 2019 22:16:41 +0800
|
||||
Subject: [PATCH] dxgi: Fix possible null output from
|
||||
d3d11_swapchain_GetFullscreenState.
|
||||
|
||||
When swapchain is created in windowed mode, and then enter fullscreen
|
||||
via Alt+Enter. Calling d3d11_swapchain_GetFullscreenState will return
|
||||
a null output because swapchain->target wasn't initialized.
|
||||
|
||||
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
|
||||
Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
|
||||
---
|
||||
dlls/dxgi/swapchain.c | 20 ++++++++++++++++----
|
||||
dlls/dxgi/tests/dxgi.c | 2 +-
|
||||
2 files changed, 17 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/dlls/dxgi/swapchain.c b/dlls/dxgi/swapchain.c
|
||||
index 8dbbfab805..caf0863609 100644
|
||||
--- a/dlls/dxgi/swapchain.c
|
||||
+++ b/dlls/dxgi/swapchain.c
|
||||
@@ -407,22 +407,34 @@ static HRESULT STDMETHODCALLTYPE d3d11_swapchain_GetFullscreenState(IDXGISwapCha
|
||||
{
|
||||
struct d3d11_swapchain *swapchain = d3d11_swapchain_from_IDXGISwapChain1(iface);
|
||||
struct wined3d_swapchain_desc swapchain_desc;
|
||||
+ HRESULT hr;
|
||||
|
||||
TRACE("iface %p, fullscreen %p, target %p.\n", iface, fullscreen, target);
|
||||
|
||||
- if (fullscreen)
|
||||
+ if (fullscreen || target)
|
||||
{
|
||||
wined3d_mutex_lock();
|
||||
wined3d_swapchain_get_desc(swapchain->wined3d_swapchain, &swapchain_desc);
|
||||
wined3d_mutex_unlock();
|
||||
- *fullscreen = !swapchain_desc.windowed;
|
||||
}
|
||||
|
||||
+ if (fullscreen)
|
||||
+ *fullscreen = !swapchain_desc.windowed;
|
||||
+
|
||||
if (target)
|
||||
{
|
||||
- *target = swapchain->target;
|
||||
- if (*target)
|
||||
+ if (!swapchain_desc.windowed)
|
||||
+ {
|
||||
+ if (!swapchain->target && FAILED(hr = IDXGISwapChain1_GetContainingOutput(iface, &swapchain->target)))
|
||||
+ return hr;
|
||||
+
|
||||
+ *target = swapchain->target;
|
||||
IDXGIOutput_AddRef(*target);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ *target = NULL;
|
||||
+ }
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
diff --git a/dlls/dxgi/tests/dxgi.c b/dlls/dxgi/tests/dxgi.c
|
||||
index 38aeba17bd..ab33caf2e2 100644
|
||||
--- a/dlls/dxgi/tests/dxgi.c
|
||||
+++ b/dlls/dxgi/tests/dxgi.c
|
||||
@@ -5456,7 +5456,7 @@ static void test_window_association(void)
|
||||
ok(fullscreen == tests[i].expect_fullscreen
|
||||
|| broken(tests[i].broken_d3d10 && fullscreen),
|
||||
"Test %u: Got unexpected fullscreen %#x.\n", i, fullscreen);
|
||||
- todo_wine_if(fullscreen) ok(fullscreen ? !!output : !output, "Test %u: Got wrong output.\n", i);
|
||||
+ ok(fullscreen ? !!output : !output, "Test %u: Got wrong output.\n", i);
|
||||
if (output)
|
||||
IDXGIOutput_Release(output);
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,61 @@
|
||||
From 0dd59c5e94d27a1d16a85807c03ff6f54bb55fbc Mon Sep 17 00:00:00 2001
|
||||
From: Jeff Smith <whydoubt@gmail.com>
|
||||
Date: Mon, 8 Jul 2019 10:19:43 -0500
|
||||
Subject: [PATCH] d3drm: Check for NULL pointer in d3drm_viewport2_GetDevice().
|
||||
|
||||
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
|
||||
Signed-off-by: Jeff Smith <whydoubt@gmail.com>
|
||||
---
|
||||
dlls/d3drm/tests/d3drm.c | 4 ++++
|
||||
dlls/d3drm/viewport.c | 6 ++++++
|
||||
2 files changed, 10 insertions(+)
|
||||
|
||||
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
|
||||
index 86678193ba..67696d5583 100644
|
||||
--- a/dlls/d3drm/tests/d3drm.c
|
||||
+++ b/dlls/d3drm/tests/d3drm.c
|
||||
@@ -2153,6 +2153,8 @@ static void test_Viewport(void)
|
||||
|
||||
hr = IDirect3DRMViewport_Init(viewport, device1, frame, rc.left, rc.top, rc.right, rc.bottom);
|
||||
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
|
||||
+ hr = IDirect3DRMViewport_GetDevice(viewport, NULL);
|
||||
+ ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
|
||||
IDirect3DRMViewport_Release(viewport);
|
||||
ref4 = get_refcount((IUnknown *)d3drm1);
|
||||
@@ -2241,6 +2243,8 @@ static void test_Viewport(void)
|
||||
|
||||
hr = IDirect3DRMViewport2_Init(viewport2, device3, frame3, rc.left, rc.top, rc.right, rc.bottom);
|
||||
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
|
||||
+ hr = IDirect3DRMViewport2_GetDevice(viewport2, NULL);
|
||||
+ ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
|
||||
IDirect3DRMViewport2_Release(viewport2);
|
||||
ref4 = get_refcount((IUnknown *)d3drm1);
|
||||
diff --git a/dlls/d3drm/viewport.c b/dlls/d3drm/viewport.c
|
||||
index 51174cd59e..d049f37213 100644
|
||||
--- a/dlls/d3drm/viewport.c
|
||||
+++ b/dlls/d3drm/viewport.c
|
||||
@@ -683,6 +683,9 @@ static HRESULT WINAPI d3drm_viewport2_GetDevice(IDirect3DRMViewport2 *iface, IDi
|
||||
|
||||
TRACE("iface %p, device %p.\n", iface, device);
|
||||
|
||||
+ if (!device)
|
||||
+ return D3DRMERR_BADVALUE;
|
||||
+
|
||||
if (!viewport->device)
|
||||
return D3DRMERR_BADOBJECT;
|
||||
|
||||
@@ -698,6 +701,9 @@ static HRESULT WINAPI d3drm_viewport1_GetDevice(IDirect3DRMViewport *iface, IDir
|
||||
|
||||
TRACE("iface %p, device %p.\n\n", iface, device);
|
||||
|
||||
+ if (!device)
|
||||
+ return D3DRMERR_BADVALUE;
|
||||
+
|
||||
if (!viewport->device)
|
||||
return D3DRMERR_BADOBJECT;
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,52 @@
|
||||
From 7ba4285719eb9592437ff0b4481f89238b035064 Mon Sep 17 00:00:00 2001
|
||||
From: Jeff Smith <whydoubt@gmail.com>
|
||||
Date: Mon, 8 Jul 2019 10:19:44 -0500
|
||||
Subject: [PATCH] d3drm: Check for NULL pointer in
|
||||
d3drm_viewport2_GetDirect3DViewport().
|
||||
|
||||
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
|
||||
Signed-off-by: Jeff Smith <whydoubt@gmail.com>
|
||||
---
|
||||
dlls/d3drm/tests/d3drm.c | 4 ++++
|
||||
dlls/d3drm/viewport.c | 3 +++
|
||||
2 files changed, 7 insertions(+)
|
||||
|
||||
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
|
||||
index 67696d5583..88f3db819d 100644
|
||||
--- a/dlls/d3drm/tests/d3drm.c
|
||||
+++ b/dlls/d3drm/tests/d3drm.c
|
||||
@@ -2155,6 +2155,8 @@ static void test_Viewport(void)
|
||||
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
|
||||
hr = IDirect3DRMViewport_GetDevice(viewport, NULL);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
+ hr = IDirect3DRMViewport_GetDirect3DViewport(viewport, NULL);
|
||||
+ ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
|
||||
IDirect3DRMViewport_Release(viewport);
|
||||
ref4 = get_refcount((IUnknown *)d3drm1);
|
||||
@@ -2245,6 +2247,8 @@ static void test_Viewport(void)
|
||||
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
|
||||
hr = IDirect3DRMViewport2_GetDevice(viewport2, NULL);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
+ hr = IDirect3DRMViewport2_GetDirect3DViewport(viewport2, NULL);
|
||||
+ ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
|
||||
IDirect3DRMViewport2_Release(viewport2);
|
||||
ref4 = get_refcount((IUnknown *)d3drm1);
|
||||
diff --git a/dlls/d3drm/viewport.c b/dlls/d3drm/viewport.c
|
||||
index d049f37213..430c9d470b 100644
|
||||
--- a/dlls/d3drm/viewport.c
|
||||
+++ b/dlls/d3drm/viewport.c
|
||||
@@ -896,6 +896,9 @@ static HRESULT WINAPI d3drm_viewport2_GetDirect3DViewport(IDirect3DRMViewport2 *
|
||||
|
||||
TRACE("iface %p, viewport %p.\n", iface, viewport);
|
||||
|
||||
+ if (!viewport)
|
||||
+ return D3DRMERR_BADVALUE;
|
||||
+
|
||||
if (!viewport_object->d3d_viewport)
|
||||
return D3DRMERR_BADOBJECT;
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,56 @@
|
||||
From e12b2ca2f2ff5fdcc93a310c5391210f71c90e5a Mon Sep 17 00:00:00 2001
|
||||
From: Jeff Smith <whydoubt@gmail.com>
|
||||
Date: Mon, 8 Jul 2019 10:19:45 -0500
|
||||
Subject: [PATCH] d3drm: Return error if setting viewport field-of-view to zero
|
||||
or negative value.
|
||||
|
||||
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
|
||||
Signed-off-by: Jeff Smith <whydoubt@gmail.com>
|
||||
---
|
||||
dlls/d3drm/tests/d3drm.c | 8 ++++++++
|
||||
dlls/d3drm/viewport.c | 3 +++
|
||||
2 files changed, 11 insertions(+)
|
||||
|
||||
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
|
||||
index 88f3db819d..dbba859215 100644
|
||||
--- a/dlls/d3drm/tests/d3drm.c
|
||||
+++ b/dlls/d3drm/tests/d3drm.c
|
||||
@@ -2157,6 +2157,10 @@ static void test_Viewport(void)
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
hr = IDirect3DRMViewport_GetDirect3DViewport(viewport, NULL);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
+ hr = IDirect3DRMViewport_SetField(viewport, 0.0f);
|
||||
+ ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
+ hr = IDirect3DRMViewport_SetField(viewport, -1.0f);
|
||||
+ ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
|
||||
IDirect3DRMViewport_Release(viewport);
|
||||
ref4 = get_refcount((IUnknown *)d3drm1);
|
||||
@@ -2249,6 +2253,10 @@ static void test_Viewport(void)
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
hr = IDirect3DRMViewport2_GetDirect3DViewport(viewport2, NULL);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
+ hr = IDirect3DRMViewport2_SetField(viewport2, 0.0f);
|
||||
+ ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
+ hr = IDirect3DRMViewport2_SetField(viewport2, -1.0f);
|
||||
+ ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
|
||||
IDirect3DRMViewport2_Release(viewport2);
|
||||
ref4 = get_refcount((IUnknown *)d3drm1);
|
||||
diff --git a/dlls/d3drm/viewport.c b/dlls/d3drm/viewport.c
|
||||
index 430c9d470b..c2fa189742 100644
|
||||
--- a/dlls/d3drm/viewport.c
|
||||
+++ b/dlls/d3drm/viewport.c
|
||||
@@ -523,6 +523,9 @@ static HRESULT WINAPI d3drm_viewport2_SetField(IDirect3DRMViewport2 *iface, D3DV
|
||||
|
||||
TRACE("iface %p, field %.8e.\n", iface, field);
|
||||
|
||||
+ if (field <= 0.0f)
|
||||
+ return D3DRMERR_BADVALUE;
|
||||
+
|
||||
viewport->field = field;
|
||||
|
||||
return D3DRM_OK;
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,25 @@
|
||||
From 616ad4e053abdc48810064993caef067a3452587 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <zfigura@codeweavers.com>
|
||||
Date: Mon, 8 Jul 2019 11:24:39 -0500
|
||||
Subject: [PATCH] strmbase: Remove unused wine/unicode.h import.
|
||||
|
||||
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
|
||||
---
|
||||
dlls/strmbase/strmbase_private.h | 1 -
|
||||
1 file changed, 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/strmbase/strmbase_private.h b/dlls/strmbase/strmbase_private.h
|
||||
index 439ab9aefa..06fbe62a42 100644
|
||||
--- a/dlls/strmbase/strmbase_private.h
|
||||
+++ b/dlls/strmbase/strmbase_private.h
|
||||
@@ -31,7 +31,6 @@
|
||||
#include "wine/heap.h"
|
||||
#include "wine/list.h"
|
||||
#include "wine/strmbase.h"
|
||||
-#include "wine/unicode.h"
|
||||
|
||||
/* Quality Control */
|
||||
typedef struct QualityControlImpl {
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,26 @@
|
||||
From b263d3d0958c18b2b8f105b87c27f9cbee176503 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <zfigura@codeweavers.com>
|
||||
Date: Mon, 8 Jul 2019 11:24:43 -0500
|
||||
Subject: [PATCH] qedit: Build with msvcrt.
|
||||
|
||||
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
|
||||
---
|
||||
dlls/qedit/Makefile.in | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/dlls/qedit/Makefile.in b/dlls/qedit/Makefile.in
|
||||
index b47ee260ab..4891328c7a 100644
|
||||
--- a/dlls/qedit/Makefile.in
|
||||
+++ b/dlls/qedit/Makefile.in
|
||||
@@ -1,6 +1,8 @@
|
||||
MODULE = qedit.dll
|
||||
IMPORTS = strmiids strmbase uuid oleaut32 ole32 advapi32
|
||||
|
||||
+EXTRADLLFLAGS = -mno-cygwin
|
||||
+
|
||||
C_SRCS = \
|
||||
main.c \
|
||||
mediadet.c \
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,40 @@
|
||||
From 4018f0ee2e502ded20bc907e3baa47ca348a61b8 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <zfigura@codeweavers.com>
|
||||
Date: Mon, 8 Jul 2019 11:24:42 -0500
|
||||
Subject: [PATCH] qedit: Share source with strmbase.
|
||||
|
||||
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
|
||||
---
|
||||
dlls/qedit/Makefile.in | 11 ++++++++++-
|
||||
1 file changed, 10 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/qedit/Makefile.in b/dlls/qedit/Makefile.in
|
||||
index 4891328c7a..c5bf8f9cac 100644
|
||||
--- a/dlls/qedit/Makefile.in
|
||||
+++ b/dlls/qedit/Makefile.in
|
||||
@@ -1,12 +1,21 @@
|
||||
MODULE = qedit.dll
|
||||
-IMPORTS = strmiids strmbase uuid oleaut32 ole32 advapi32
|
||||
+IMPORTS = strmiids uuid oleaut32 ole32 advapi32
|
||||
+PARENTSRC = ../strmbase
|
||||
|
||||
EXTRADLLFLAGS = -mno-cygwin
|
||||
|
||||
C_SRCS = \
|
||||
+ dispatch.c \
|
||||
+ enumpins.c \
|
||||
+ filter.c \
|
||||
main.c \
|
||||
mediadet.c \
|
||||
+ mediatype.c \
|
||||
nullrenderer.c \
|
||||
+ pin.c \
|
||||
+ pospass.c \
|
||||
+ qualitycontrol.c \
|
||||
+ renderer.c \
|
||||
samplegrabber.c \
|
||||
timeline.c
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,53 @@
|
||||
From 4b3eebfae7a5a03f3c1644c65d5f1c00af0c4ae3 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <zfigura@codeweavers.com>
|
||||
Date: Mon, 8 Jul 2019 11:24:41 -0500
|
||||
Subject: [PATCH] evr: Build with msvcrt.
|
||||
|
||||
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
|
||||
---
|
||||
dlls/evr/Makefile.in | 2 ++
|
||||
dlls/evr/evr.c | 1 -
|
||||
dlls/evr/main.c | 2 --
|
||||
3 files changed, 2 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/dlls/evr/Makefile.in b/dlls/evr/Makefile.in
|
||||
index dc7989e835..053d80e61d 100644
|
||||
--- a/dlls/evr/Makefile.in
|
||||
+++ b/dlls/evr/Makefile.in
|
||||
@@ -1,6 +1,8 @@
|
||||
MODULE = evr.dll
|
||||
IMPORTS = mfuuid strmiids strmbase uuid ole32 oleaut32
|
||||
|
||||
+EXTRADLLFLAGS = -mno-cygwin
|
||||
+
|
||||
C_SRCS = \
|
||||
evr.c \
|
||||
main.c
|
||||
diff --git a/dlls/evr/evr.c b/dlls/evr/evr.c
|
||||
index b64b0468ac..655ca79b0d 100644
|
||||
--- a/dlls/evr/evr.c
|
||||
+++ b/dlls/evr/evr.c
|
||||
@@ -18,7 +18,6 @@
|
||||
|
||||
#define COBJMACROS
|
||||
|
||||
-#include "config.h"
|
||||
#include "wine/debug.h"
|
||||
|
||||
#include <stdio.h>
|
||||
diff --git a/dlls/evr/main.c b/dlls/evr/main.c
|
||||
index ba48207326..000ed7c55b 100644
|
||||
--- a/dlls/evr/main.c
|
||||
+++ b/dlls/evr/main.c
|
||||
@@ -18,8 +18,6 @@
|
||||
|
||||
#define COBJMACROS
|
||||
|
||||
-#include "config.h"
|
||||
-
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "windef.h"
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,39 @@
|
||||
From 29294a8ce4ae5114396464e8aa177e267881e734 Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <zfigura@codeweavers.com>
|
||||
Date: Mon, 8 Jul 2019 11:24:40 -0500
|
||||
Subject: [PATCH] evr: Share source with strmbase.
|
||||
|
||||
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
|
||||
---
|
||||
dlls/evr/Makefile.in | 13 +++++++++++--
|
||||
1 file changed, 11 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/evr/Makefile.in b/dlls/evr/Makefile.in
|
||||
index 053d80e61d..e605ce227c 100644
|
||||
--- a/dlls/evr/Makefile.in
|
||||
+++ b/dlls/evr/Makefile.in
|
||||
@@ -1,10 +1,19 @@
|
||||
MODULE = evr.dll
|
||||
-IMPORTS = mfuuid strmiids strmbase uuid ole32 oleaut32
|
||||
+IMPORTS = mfuuid strmiids uuid ole32 oleaut32
|
||||
+PARENTSRC = ../strmbase
|
||||
|
||||
EXTRADLLFLAGS = -mno-cygwin
|
||||
|
||||
C_SRCS = \
|
||||
+ dispatch.c \
|
||||
+ enumpins.c \
|
||||
evr.c \
|
||||
- main.c
|
||||
+ filter.c \
|
||||
+ main.c \
|
||||
+ mediatype.c \
|
||||
+ pin.c \
|
||||
+ pospass.c \
|
||||
+ qualitycontrol.c \
|
||||
+ renderer.c
|
||||
|
||||
IDL_SRCS = evr_classes.idl
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,311 @@
|
||||
From cefe28f14b32726d67fcc17e0c5195c1f8d3f61e Mon Sep 17 00:00:00 2001
|
||||
From: Zebediah Figura <zfigura@codeweavers.com>
|
||||
Date: Mon, 8 Jul 2019 11:32:27 -0500
|
||||
Subject: [PATCH] user32: Also scan for mouse devices in
|
||||
GetRawInputDeviceList().
|
||||
|
||||
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com>
|
||||
---
|
||||
dlls/user32/rawinput.c | 124 ++++++++++++++++++++++----------------
|
||||
dlls/user32/tests/input.c | 2 +-
|
||||
2 files changed, 74 insertions(+), 52 deletions(-)
|
||||
|
||||
diff --git a/dlls/user32/rawinput.c b/dlls/user32/rawinput.c
|
||||
index 49cf9f73a0..e83da29009 100644
|
||||
--- a/dlls/user32/rawinput.c
|
||||
+++ b/dlls/user32/rawinput.c
|
||||
@@ -36,27 +36,30 @@
|
||||
|
||||
#include "user_private.h"
|
||||
|
||||
+#include "initguid.h"
|
||||
+#include "ntddmou.h"
|
||||
+
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(rawinput);
|
||||
|
||||
-struct hid_device
|
||||
+struct device
|
||||
{
|
||||
WCHAR *path;
|
||||
HANDLE file;
|
||||
- RID_DEVICE_INFO_HID info;
|
||||
+ RID_DEVICE_INFO info;
|
||||
PHIDP_PREPARSED_DATA data;
|
||||
};
|
||||
|
||||
-static struct hid_device *hid_devices;
|
||||
-static unsigned int hid_devices_count, hid_devices_max;
|
||||
+static struct device *rawinput_devices;
|
||||
+static unsigned int rawinput_devices_count, rawinput_devices_max;
|
||||
|
||||
-static CRITICAL_SECTION hid_devices_cs;
|
||||
-static CRITICAL_SECTION_DEBUG hid_devices_cs_debug =
|
||||
+static CRITICAL_SECTION rawinput_devices_cs;
|
||||
+static CRITICAL_SECTION_DEBUG rawinput_devices_cs_debug =
|
||||
{
|
||||
- 0, 0, &hid_devices_cs,
|
||||
- { &hid_devices_cs_debug.ProcessLocksList, &hid_devices_cs_debug.ProcessLocksList },
|
||||
- 0, 0, { (DWORD_PTR)(__FILE__ ": hid_devices_cs") }
|
||||
+ 0, 0, &rawinput_devices_cs,
|
||||
+ { &rawinput_devices_cs_debug.ProcessLocksList, &rawinput_devices_cs_debug.ProcessLocksList },
|
||||
+ 0, 0, { (DWORD_PTR)(__FILE__ ": rawinput_devices_cs") }
|
||||
};
|
||||
-static CRITICAL_SECTION hid_devices_cs = { &hid_devices_cs_debug, -1, 0, 0, 0, 0 };
|
||||
+static CRITICAL_SECTION rawinput_devices_cs = { &rawinput_devices_cs_debug, -1, 0, 0, 0, 0 };
|
||||
|
||||
static BOOL array_reserve(void **elements, unsigned int *capacity, unsigned int count, unsigned int size)
|
||||
{
|
||||
@@ -85,10 +88,10 @@ static BOOL array_reserve(void **elements, unsigned int *capacity, unsigned int
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
-static struct hid_device *add_device(HDEVINFO set, SP_DEVICE_INTERFACE_DATA *iface)
|
||||
+static struct device *add_device(HDEVINFO set, SP_DEVICE_INTERFACE_DATA *iface)
|
||||
{
|
||||
SP_DEVICE_INTERFACE_DETAIL_DATA_W *detail;
|
||||
- struct hid_device *device;
|
||||
+ struct device *device;
|
||||
HANDLE file;
|
||||
WCHAR *path;
|
||||
DWORD size;
|
||||
@@ -126,7 +129,8 @@ static struct hid_device *add_device(HDEVINFO set, SP_DEVICE_INTERFACE_DATA *ifa
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- if (!array_reserve((void **)&hid_devices, &hid_devices_max, hid_devices_count + 1, sizeof(*hid_devices)))
|
||||
+ if (!array_reserve((void **)&rawinput_devices, &rawinput_devices_max,
|
||||
+ rawinput_devices_count + 1, sizeof(*rawinput_devices)))
|
||||
{
|
||||
ERR("Failed to allocate memory.\n");
|
||||
CloseHandle(file);
|
||||
@@ -134,19 +138,20 @@ static struct hid_device *add_device(HDEVINFO set, SP_DEVICE_INTERFACE_DATA *ifa
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- device = &hid_devices[hid_devices_count++];
|
||||
+ device = &rawinput_devices[rawinput_devices_count++];
|
||||
device->path = path;
|
||||
device->file = file;
|
||||
+ device->info.cbSize = sizeof(RID_DEVICE_INFO);
|
||||
|
||||
return device;
|
||||
}
|
||||
|
||||
-static void find_hid_devices(void)
|
||||
+static void find_devices(void)
|
||||
{
|
||||
static ULONGLONG last_check;
|
||||
|
||||
SP_DEVICE_INTERFACE_DATA iface = { sizeof(iface) };
|
||||
- struct hid_device *device;
|
||||
+ struct device *device;
|
||||
HIDD_ATTRIBUTES attr;
|
||||
HIDP_CAPS caps;
|
||||
GUID hid_guid;
|
||||
@@ -159,18 +164,18 @@ static void find_hid_devices(void)
|
||||
|
||||
HidD_GetHidGuid(&hid_guid);
|
||||
|
||||
- set = SetupDiGetClassDevsW(&hid_guid, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);
|
||||
-
|
||||
- EnterCriticalSection(&hid_devices_cs);
|
||||
+ EnterCriticalSection(&rawinput_devices_cs);
|
||||
|
||||
/* destroy previous list */
|
||||
- for (idx = 0; idx < hid_devices_count; ++idx)
|
||||
+ for (idx = 0; idx < rawinput_devices_count; ++idx)
|
||||
{
|
||||
- CloseHandle(hid_devices[idx].file);
|
||||
- heap_free(hid_devices[idx].path);
|
||||
+ CloseHandle(rawinput_devices[idx].file);
|
||||
+ heap_free(rawinput_devices[idx].path);
|
||||
}
|
||||
+ rawinput_devices_count = 0;
|
||||
+
|
||||
+ set = SetupDiGetClassDevsW(&hid_guid, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);
|
||||
|
||||
- hid_devices_count = 0;
|
||||
for (idx = 0; SetupDiEnumDeviceInterfaces(set, NULL, &hid_guid, idx, &iface); ++idx)
|
||||
{
|
||||
if (!(device = add_device(set, &iface)))
|
||||
@@ -179,9 +184,11 @@ static void find_hid_devices(void)
|
||||
attr.Size = sizeof(HIDD_ATTRIBUTES);
|
||||
if (!HidD_GetAttributes(device->file, &attr))
|
||||
WARN("Failed to get attributes.\n");
|
||||
- device->info.dwVendorId = attr.VendorID;
|
||||
- device->info.dwProductId = attr.ProductID;
|
||||
- device->info.dwVersionNumber = attr.VersionNumber;
|
||||
+
|
||||
+ device->info.dwType = RIM_TYPEHID;
|
||||
+ device->info.u.hid.dwVendorId = attr.VendorID;
|
||||
+ device->info.u.hid.dwProductId = attr.ProductID;
|
||||
+ device->info.u.hid.dwVersionNumber = attr.VersionNumber;
|
||||
|
||||
if (!HidD_GetPreparsedData(device->file, &device->data))
|
||||
WARN("Failed to get preparsed data.\n");
|
||||
@@ -189,12 +196,28 @@ static void find_hid_devices(void)
|
||||
if (!HidP_GetCaps(device->data, &caps))
|
||||
WARN("Failed to get caps.\n");
|
||||
|
||||
- device->info.usUsagePage = caps.UsagePage;
|
||||
- device->info.usUsage = caps.Usage;
|
||||
+ device->info.u.hid.usUsagePage = caps.UsagePage;
|
||||
+ device->info.u.hid.usUsage = caps.Usage;
|
||||
}
|
||||
|
||||
- LeaveCriticalSection(&hid_devices_cs);
|
||||
SetupDiDestroyDeviceInfoList(set);
|
||||
+
|
||||
+ set = SetupDiGetClassDevsW(&GUID_DEVINTERFACE_MOUSE, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);
|
||||
+
|
||||
+ for (idx = 0; SetupDiEnumDeviceInterfaces(set, NULL, &GUID_DEVINTERFACE_MOUSE, idx, &iface); ++idx)
|
||||
+ {
|
||||
+ static const RID_DEVICE_INFO_MOUSE mouse_info = {1, 5, 0, FALSE};
|
||||
+
|
||||
+ if (!(device = add_device(set, &iface)))
|
||||
+ continue;
|
||||
+
|
||||
+ device->info.dwType = RIM_TYPEMOUSE;
|
||||
+ device->info.u.mouse = mouse_info;
|
||||
+ }
|
||||
+
|
||||
+ SetupDiDestroyDeviceInfoList(set);
|
||||
+
|
||||
+ LeaveCriticalSection(&rawinput_devices_cs);
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
@@ -218,18 +241,18 @@ UINT WINAPI GetRawInputDeviceList(RAWINPUTDEVICELIST *devices, UINT *device_coun
|
||||
return ~0U;
|
||||
}
|
||||
|
||||
- find_hid_devices();
|
||||
+ find_devices();
|
||||
|
||||
if (!devices)
|
||||
{
|
||||
- *device_count = 2 + hid_devices_count;
|
||||
+ *device_count = 2 + rawinput_devices_count;
|
||||
return 0;
|
||||
}
|
||||
|
||||
- if (*device_count < 2 + hid_devices_count)
|
||||
+ if (*device_count < 2 + rawinput_devices_count)
|
||||
{
|
||||
SetLastError(ERROR_INSUFFICIENT_BUFFER);
|
||||
- *device_count = 2 + hid_devices_count;
|
||||
+ *device_count = 2 + rawinput_devices_count;
|
||||
return ~0U;
|
||||
}
|
||||
|
||||
@@ -238,13 +261,13 @@ UINT WINAPI GetRawInputDeviceList(RAWINPUTDEVICELIST *devices, UINT *device_coun
|
||||
devices[1].hDevice = WINE_KEYBOARD_HANDLE;
|
||||
devices[1].dwType = RIM_TYPEKEYBOARD;
|
||||
|
||||
- for (i = 0; i < hid_devices_count; ++i)
|
||||
+ for (i = 0; i < rawinput_devices_count; ++i)
|
||||
{
|
||||
- devices[2 + i].hDevice = &hid_devices[i];
|
||||
- devices[2 + i].dwType = RIM_TYPEHID;
|
||||
+ devices[2 + i].hDevice = &rawinput_devices[i];
|
||||
+ devices[2 + i].dwType = rawinput_devices[i].info.dwType;
|
||||
}
|
||||
|
||||
- return 2 + hid_devices_count;
|
||||
+ return 2 + rawinput_devices_count;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
@@ -386,41 +409,41 @@ UINT WINAPI GetRawInputDeviceInfoA(HANDLE device, UINT command, void *data, UINT
|
||||
/***********************************************************************
|
||||
* GetRawInputDeviceInfoW (USER32.@)
|
||||
*/
|
||||
-UINT WINAPI GetRawInputDeviceInfoW(HANDLE device, UINT command, void *data, UINT *data_size)
|
||||
+UINT WINAPI GetRawInputDeviceInfoW(HANDLE handle, UINT command, void *data, UINT *data_size)
|
||||
{
|
||||
/* FIXME: Most of this is made up. */
|
||||
static const WCHAR keyboard_name[] = {'\\','\\','?','\\','W','I','N','E','_','K','E','Y','B','O','A','R','D',0};
|
||||
static const WCHAR mouse_name[] = {'\\','\\','?','\\','W','I','N','E','_','M','O','U','S','E',0};
|
||||
static const RID_DEVICE_INFO_KEYBOARD keyboard_info = {0, 0, 1, 12, 3, 101};
|
||||
static const RID_DEVICE_INFO_MOUSE mouse_info = {1, 5, 0, FALSE};
|
||||
- struct hid_device *hid_device;
|
||||
const WCHAR *name = NULL;
|
||||
RID_DEVICE_INFO *info;
|
||||
+ struct device *device;
|
||||
UINT s;
|
||||
|
||||
- TRACE("device %p, command %#x, data %p, data_size %p.\n",
|
||||
- device, command, data, data_size);
|
||||
+ TRACE("handle %p, command %#x, data %p, data_size %p.\n",
|
||||
+ handle, command, data, data_size);
|
||||
|
||||
if (!data_size) return ~0U;
|
||||
|
||||
switch (command)
|
||||
{
|
||||
case RIDI_DEVICENAME:
|
||||
- if (device == WINE_MOUSE_HANDLE)
|
||||
+ if (handle == WINE_MOUSE_HANDLE)
|
||||
{
|
||||
s = ARRAY_SIZE(mouse_name);
|
||||
name = mouse_name;
|
||||
}
|
||||
- else if (device == WINE_KEYBOARD_HANDLE)
|
||||
+ else if (handle == WINE_KEYBOARD_HANDLE)
|
||||
{
|
||||
s = ARRAY_SIZE(keyboard_name);
|
||||
name = keyboard_name;
|
||||
}
|
||||
else
|
||||
{
|
||||
- hid_device = device;
|
||||
- s = strlenW(hid_device->path) + 1;
|
||||
- name = hid_device->path;
|
||||
+ device = handle;
|
||||
+ s = strlenW(device->path) + 1;
|
||||
+ name = device->path;
|
||||
}
|
||||
break;
|
||||
case RIDI_DEVICEINFO:
|
||||
@@ -450,21 +473,20 @@ UINT WINAPI GetRawInputDeviceInfoW(HANDLE device, UINT command, void *data, UINT
|
||||
|
||||
info = data;
|
||||
info->cbSize = sizeof(*info);
|
||||
- if (device == WINE_MOUSE_HANDLE)
|
||||
+ if (handle == WINE_MOUSE_HANDLE)
|
||||
{
|
||||
info->dwType = RIM_TYPEMOUSE;
|
||||
info->u.mouse = mouse_info;
|
||||
}
|
||||
- else if (device == WINE_KEYBOARD_HANDLE)
|
||||
+ else if (handle == WINE_KEYBOARD_HANDLE)
|
||||
{
|
||||
info->dwType = RIM_TYPEKEYBOARD;
|
||||
info->u.keyboard = keyboard_info;
|
||||
}
|
||||
else
|
||||
{
|
||||
- hid_device = device;
|
||||
- info->dwType = RIM_TYPEHID;
|
||||
- info->u.hid = hid_device->info;
|
||||
+ device = handle;
|
||||
+ *info = device->info;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c
|
||||
index d0dc4a8bcf..78f46bb6ba 100644
|
||||
--- a/dlls/user32/tests/input.c
|
||||
+++ b/dlls/user32/tests/input.c
|
||||
@@ -1670,7 +1670,7 @@ static void test_GetRawInputDeviceList(void)
|
||||
* understand that; so use the \\?\ prefix instead */
|
||||
name[1] = '\\';
|
||||
file = CreateFileW(name, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
|
||||
- todo_wine_if(info.dwType != RIM_TYPEHID)
|
||||
+ todo_wine_if(i == 0 || i == 1)
|
||||
ok(file != INVALID_HANDLE_VALUE, "Failed to open %s, error %u\n", wine_dbgstr_w(name), GetLastError());
|
||||
CloseHandle(file);
|
||||
}
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,72 @@
|
||||
From 79c6b2c90c4935a648db1320fb0c354ca3adc138 Mon Sep 17 00:00:00 2001
|
||||
From: Jeff Smith <whydoubt@gmail.com>
|
||||
Date: Mon, 8 Jul 2019 14:40:23 -0500
|
||||
Subject: [PATCH] d3drm: Correct paramater count of several interface defines.
|
||||
|
||||
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
|
||||
---
|
||||
include/d3drm.h | 16 ++++++++--------
|
||||
include/d3drmobj.h | 6 +++---
|
||||
2 files changed, 11 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/include/d3drm.h b/include/d3drm.h
|
||||
index 126695cea1..c10b9ed18c 100644
|
||||
--- a/include/d3drm.h
|
||||
+++ b/include/d3drm.h
|
||||
@@ -322,7 +322,7 @@ DECLARE_INTERFACE_(IDirect3DRM2,IUnknown)
|
||||
#define IDirect3DRM2_EnumerateObjects(p,a,b) (p)->EnumerateObjects(a,b)
|
||||
#define IDirect3DRM2_Load(p,a,b,c,d,e,f,g,h,i,j) (p)->Load(a,b,c,d,e,f,g,h,i,j)
|
||||
#define IDirect3DRM2_Tick(p,a) (p)->Tick(a)
|
||||
-#define IDirect3DRM2_CreateProgressiveMesh(p,a) (p)->CreateProgressiveMesh(p,a)
|
||||
+#define IDirect3DRM2_CreateProgressiveMesh(p,a) (p)->CreateProgressiveMesh(a)
|
||||
#endif
|
||||
|
||||
/*****************************************************************************
|
||||
@@ -434,7 +434,7 @@ DECLARE_INTERFACE_(IDirect3DRM3,IUnknown)
|
||||
#define IDirect3DRM3_CreateProgressiveMesh(p,a) (p)->lpVtbl->CreateProgressiveMesh(p,a)
|
||||
#define IDirect3DRM3_RegisterClient(p,a,b) (p)->lpVtbl->RegisterClient(p,a,b)
|
||||
#define IDirect3DRM3_UnregisterClient(p,a) (p)->lpVtbl->UnregisterClient(p,a)
|
||||
-#define IDirect3DRM3_CreateClippedVisual(p,ab) (p)->lpVtbl->CreateClippedVisual(p,a,b)
|
||||
+#define IDirect3DRM3_CreateClippedVisual(p,a,b) (p)->lpVtbl->CreateClippedVisual(p,a,b)
|
||||
#define IDirect3DRM3_SetOptions(p,a) (p)->lpVtbl->SetOptions(p,a)
|
||||
#define IDirect3DRM3_GetOptions(p,a) (p)->lpVtbl->GetOptions(p,a)
|
||||
#else
|
||||
@@ -475,12 +475,12 @@ DECLARE_INTERFACE_(IDirect3DRM3,IUnknown)
|
||||
#define IDirect3DRM3_EnumerateObjects(p,a,b) (p)->EnumerateObjects(a,b)
|
||||
#define IDirect3DRM3_Load(p,a,b,c,d,e,f,g,h,i,j) (p)->Load(a,b,c,d,e,f,g,h,i,j)
|
||||
#define IDirect3DRM3_Tick(p,a) (p)->Tick(a)
|
||||
-#define IDirect3DRM3_CreateProgressiveMesh(p,a) (p)->CreateProgressiveMesh(p,a)
|
||||
-#define IDirect3DRM3_RegisterClient(p,a,b) (p)->RegisterClient(p,a,b)
|
||||
-#define IDirect3DRM3_UnregisterClient(p,a) (p)->UnregisterClient(p,a)
|
||||
-#define IDirect3DRM3_CreateClippedVisual(p,ab) (p)->CreateClippedVisual(p,a,b)
|
||||
-#define IDirect3DRM3_SetOptions(p,a) (p)->SetOptions(p,a)
|
||||
-#define IDirect3DRM3_GetOptions(p,a) (p)->GetOptions(p,a)
|
||||
+#define IDirect3DRM3_CreateProgressiveMesh(p,a) (p)->CreateProgressiveMesh(a)
|
||||
+#define IDirect3DRM3_RegisterClient(p,a,b) (p)->RegisterClient(a,b)
|
||||
+#define IDirect3DRM3_UnregisterClient(p,a) (p)->UnregisterClient(a)
|
||||
+#define IDirect3DRM3_CreateClippedVisual(p,a,b) (p)->CreateClippedVisual(a,b)
|
||||
+#define IDirect3DRM3_SetOptions(p,a) (p)->SetOptions(a)
|
||||
+#define IDirect3DRM3_GetOptions(p,a) (p)->GetOptions(a)
|
||||
#endif
|
||||
|
||||
#define D3DRM_OK DD_OK
|
||||
diff --git a/include/d3drmobj.h b/include/d3drmobj.h
|
||||
index 5ff33fea01..7e48d9891d 100644
|
||||
--- a/include/d3drmobj.h
|
||||
+++ b/include/d3drmobj.h
|
||||
@@ -3616,9 +3616,9 @@ DECLARE_INTERFACE_(IDirect3DRMWrap, IDirect3DRMObject)
|
||||
#define IDirect3DRMWrap_GetName(p,a,b) (p)->GetName(a,b)
|
||||
#define IDirect3DRMWrap_GetClassName(p,a,b) (p)->GetClassName(a,b)
|
||||
/*** IDirect3DRMWrap methods ***/
|
||||
-#define IDirect3DRMWrap_Init(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) (p)->Init(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o)
|
||||
-#define IDirect3DRMWrap_Apply(p,a) (p)->Apply(p,a)
|
||||
-#define IDirect3DRMWrap_ApplyRelative(p,a,b) (p)->ApplyRelative(p,a,b)
|
||||
+#define IDirect3DRMWrap_Init(p,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) (p)->Init(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o)
|
||||
+#define IDirect3DRMWrap_Apply(p,a) (p)->Apply(a)
|
||||
+#define IDirect3DRMWrap_ApplyRelative(p,a,b) (p)->ApplyRelative(a,b)
|
||||
#endif
|
||||
|
||||
/*****************************************************************************
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,48 @@
|
||||
From 79d72547489b6420aba533c4fb6a513e8854fcd4 Mon Sep 17 00:00:00 2001
|
||||
From: Austin English <austinenglish@gmail.com>
|
||||
Date: Tue, 9 Jul 2019 01:07:21 -0500
|
||||
Subject: [PATCH] shell32: add SHMultiFileProperties stub
|
||||
|
||||
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47411
|
||||
Signed-off-by: Austin English <austinenglish@gmail.com>
|
||||
---
|
||||
dlls/shell32/shell32.spec | 1 +
|
||||
dlls/shell32/shlfileop.c | 10 ++++++++++
|
||||
2 files changed, 11 insertions(+)
|
||||
|
||||
diff --git a/dlls/shell32/shell32.spec b/dlls/shell32/shell32.spec
|
||||
index 7ed7bb531d..5331ffff94 100644
|
||||
--- a/dlls/shell32/shell32.spec
|
||||
+++ b/dlls/shell32/shell32.spec
|
||||
@@ -409,6 +409,7 @@
|
||||
@ stdcall SHIsFileAvailableOffline(wstr ptr)
|
||||
@ stdcall SHLoadInProc(ptr)
|
||||
@ stdcall SHLoadNonloadedIconOverlayIdentifiers()
|
||||
+@ stdcall SHMultiFileProperties(ptr long)
|
||||
@ stdcall SHOpenFolderAndSelectItems(ptr long ptr long)
|
||||
@ stdcall SHOpenWithDialog(long ptr)
|
||||
@ stdcall SHParseDisplayName(wstr ptr ptr long ptr)
|
||||
diff --git a/dlls/shell32/shlfileop.c b/dlls/shell32/shlfileop.c
|
||||
index 1515ad3891..22e1b523e0 100644
|
||||
--- a/dlls/shell32/shlfileop.c
|
||||
+++ b/dlls/shell32/shlfileop.c
|
||||
@@ -1727,6 +1727,16 @@ int WINAPI RealDriveType(int drive, BOOL bQueryNet)
|
||||
return GetDriveTypeA(root);
|
||||
}
|
||||
|
||||
+/*************************************************************************
|
||||
+ * SHMultiFileProperties [SHELL32.@]
|
||||
+ */
|
||||
+
|
||||
+HRESULT WINAPI SHMultiFileProperties(IDataObject *pdtobj, DWORD flags)
|
||||
+{
|
||||
+ FIXME("stub: %p %u\n", pdtobj, flags);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
/***********************************************************************
|
||||
* SHPathPrepareForWriteA (SHELL32.@)
|
||||
*/
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,157 @@
|
||||
From a4fda32d2dc0115017f3fa87413d84a08d193328 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
|
||||
Date: Tue, 9 Jul 2019 11:12:07 +0200
|
||||
Subject: [PATCH] winebus.sys: Report the native product string for some Xbox
|
||||
gamepads
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Some games are checking the hid product string of connected gamepads in
|
||||
order to decide whether or not to activate rumble.
|
||||
|
||||
Wine usually delegates these queries to the backend driver, but they
|
||||
don't always report the same product strings as on Windows. This will
|
||||
allow to override backend strings with the actual strings as reported
|
||||
by native drivers.
|
||||
|
||||
Signed-off-by: Rémi Bernon <rbernon@codeweavers.com>
|
||||
---
|
||||
dlls/winebus.sys/main.c | 98 ++++++++++++++++++++++++++++++++++-------
|
||||
1 file changed, 81 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/dlls/winebus.sys/main.c b/dlls/winebus.sys/main.c
|
||||
index 26200bde3e..12ff0b3e15 100644
|
||||
--- a/dlls/winebus.sys/main.c
|
||||
+++ b/dlls/winebus.sys/main.c
|
||||
@@ -49,22 +49,39 @@ WINE_DECLARE_DEBUG_CHANNEL(hid_report);
|
||||
|
||||
static const WCHAR backslashW[] = {'\\',0};
|
||||
|
||||
+struct product_desc
|
||||
+{
|
||||
+ WORD vid;
|
||||
+ WORD pid;
|
||||
+ const WCHAR* manufacturer;
|
||||
+ const WCHAR* product;
|
||||
+ const WCHAR* serialnumber;
|
||||
+};
|
||||
+
|
||||
#define VID_MICROSOFT 0x045e
|
||||
|
||||
-static const WORD PID_XBOX_CONTROLLERS[] = {
|
||||
- 0x0202, /* Xbox Controller */
|
||||
- 0x0285, /* Xbox Controller S */
|
||||
- 0x0289, /* Xbox Controller S */
|
||||
- 0x028e, /* Xbox360 Controller */
|
||||
- 0x028f, /* Xbox360 Wireless Controller */
|
||||
- 0x02d1, /* Xbox One Controller */
|
||||
- 0x02dd, /* Xbox One Controller (Covert Forces/Firmware 2015) */
|
||||
- 0x02e0, /* Xbox One X Controller */
|
||||
- 0x02e3, /* Xbox One Elite Controller */
|
||||
- 0x02e6, /* Wireless XBox Controller Dongle */
|
||||
- 0x02ea, /* Xbox One S Controller */
|
||||
- 0x02fd, /* Xbox One S Controller (Firmware 2017) */
|
||||
- 0x0719, /* Xbox 360 Wireless Adapter */
|
||||
+static const WCHAR xbox360_product_string[] = {
|
||||
+ 'C','o','n','t','r','o','l','l','e','r',' ','(','X','B','O','X',' ','3','6','0',' ','F','o','r',' ','W','i','n','d','o','w','s',')',0
|
||||
+};
|
||||
+
|
||||
+static const WCHAR xboxone_product_string[] = {
|
||||
+ 'C','o','n','t','r','o','l','l','e','r',' ','(','X','B','O','X',' ','O','n','e',' ','F','o','r',' ','W','i','n','d','o','w','s',')',0
|
||||
+};
|
||||
+
|
||||
+static const struct product_desc XBOX_CONTROLLERS[] = {
|
||||
+ {VID_MICROSOFT, 0x0202, NULL, NULL, NULL}, /* Xbox Controller */
|
||||
+ {VID_MICROSOFT, 0x0285, NULL, NULL, NULL}, /* Xbox Controller S */
|
||||
+ {VID_MICROSOFT, 0x0289, NULL, NULL, NULL}, /* Xbox Controller S */
|
||||
+ {VID_MICROSOFT, 0x028e, NULL, xbox360_product_string, NULL}, /* Xbox360 Controller */
|
||||
+ {VID_MICROSOFT, 0x028f, NULL, xbox360_product_string, NULL}, /* Xbox360 Wireless Controller */
|
||||
+ {VID_MICROSOFT, 0x02d1, NULL, xboxone_product_string, NULL}, /* Xbox One Controller */
|
||||
+ {VID_MICROSOFT, 0x02dd, NULL, xboxone_product_string, NULL}, /* Xbox One Controller (Covert Forces/Firmware 2015) */
|
||||
+ {VID_MICROSOFT, 0x02e0, NULL, NULL, NULL}, /* Xbox One X Controller */
|
||||
+ {VID_MICROSOFT, 0x02e3, NULL, xboxone_product_string, NULL}, /* Xbox One Elite Controller */
|
||||
+ {VID_MICROSOFT, 0x02e6, NULL, NULL, NULL}, /* Wireless XBox Controller Dongle */
|
||||
+ {VID_MICROSOFT, 0x02ea, NULL, xboxone_product_string, NULL}, /* Xbox One S Controller */
|
||||
+ {VID_MICROSOFT, 0x02fd, NULL, xboxone_product_string, NULL}, /* Xbox One S Controller (Firmware 2017) */
|
||||
+ {VID_MICROSOFT, 0x0719, NULL, xbox360_product_string, NULL}, /* Xbox 360 Wireless Adapter */
|
||||
};
|
||||
|
||||
static DRIVER_OBJECT *driver_obj;
|
||||
@@ -565,6 +582,51 @@ static NTSTATUS deliver_last_report(struct device_extension *ext, DWORD buffer_l
|
||||
}
|
||||
}
|
||||
|
||||
+static NTSTATUS hid_get_native_string(DEVICE_OBJECT *device, DWORD index, WCHAR *buffer, DWORD length)
|
||||
+{
|
||||
+ struct device_extension *ext = (struct device_extension *)device->DeviceExtension;
|
||||
+ int i;
|
||||
+
|
||||
+ if (ext->vid == VID_MICROSOFT)
|
||||
+ {
|
||||
+ for (i = 0; i < ARRAY_SIZE(XBOX_CONTROLLERS); i++)
|
||||
+ {
|
||||
+ if (ext->pid == XBOX_CONTROLLERS[i].pid)
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (i >= ARRAY_SIZE(XBOX_CONTROLLERS))
|
||||
+ return STATUS_UNSUCCESSFUL;
|
||||
+
|
||||
+ switch (index)
|
||||
+ {
|
||||
+ case HID_STRING_ID_IPRODUCT:
|
||||
+ if (XBOX_CONTROLLERS[i].product)
|
||||
+ {
|
||||
+ strcpyW(buffer, XBOX_CONTROLLERS[i].product);
|
||||
+ return STATUS_SUCCESS;
|
||||
+ }
|
||||
+ break;
|
||||
+ case HID_STRING_ID_IMANUFACTURER:
|
||||
+ if (XBOX_CONTROLLERS[i].manufacturer)
|
||||
+ {
|
||||
+ strcpyW(buffer, XBOX_CONTROLLERS[i].manufacturer);
|
||||
+ return STATUS_SUCCESS;
|
||||
+ }
|
||||
+ break;
|
||||
+ case HID_STRING_ID_ISERIALNUMBER:
|
||||
+ if (XBOX_CONTROLLERS[i].serialnumber)
|
||||
+ {
|
||||
+ strcpyW(buffer, XBOX_CONTROLLERS[i].serialnumber);
|
||||
+ return STATUS_SUCCESS;
|
||||
+ }
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return STATUS_UNSUCCESSFUL;
|
||||
+}
|
||||
+
|
||||
static NTSTATUS WINAPI hid_internal_dispatch(DEVICE_OBJECT *device, IRP *irp)
|
||||
{
|
||||
NTSTATUS status = irp->IoStatus.u.Status;
|
||||
@@ -650,7 +712,9 @@ static NTSTATUS WINAPI hid_internal_dispatch(DEVICE_OBJECT *device, IRP *irp)
|
||||
DWORD index = (ULONG_PTR)irpsp->Parameters.DeviceIoControl.Type3InputBuffer;
|
||||
TRACE("IOCTL_HID_GET_STRING[%08x]\n", index);
|
||||
|
||||
- irp->IoStatus.u.Status = status = ext->vtbl->get_string(device, index, (WCHAR *)irp->UserBuffer, length);
|
||||
+ irp->IoStatus.u.Status = status = hid_get_native_string(device, index, (WCHAR *)irp->UserBuffer, length);
|
||||
+ if (status != STATUS_SUCCESS)
|
||||
+ irp->IoStatus.u.Status = status = ext->vtbl->get_string(device, index, (WCHAR *)irp->UserBuffer, length);
|
||||
if (status == STATUS_SUCCESS)
|
||||
irp->IoStatus.Information = (strlenW((WCHAR *)irp->UserBuffer) + 1) * sizeof(WCHAR);
|
||||
break;
|
||||
@@ -815,8 +879,8 @@ BOOL is_xbox_gamepad(WORD vid, WORD pid)
|
||||
if (vid != VID_MICROSOFT)
|
||||
return FALSE;
|
||||
|
||||
- for (i = 0; i < ARRAY_SIZE(PID_XBOX_CONTROLLERS); i++)
|
||||
- if (pid == PID_XBOX_CONTROLLERS[i]) return TRUE;
|
||||
+ for (i = 0; i < ARRAY_SIZE(XBOX_CONTROLLERS); i++)
|
||||
+ if (pid == XBOX_CONTROLLERS[i].pid) return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,34 @@
|
||||
From e5074e5038ec7f41752133a35c0f36ef9c25d719 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Gabriel=20Iv=C4=83ncescu?= <gabrielopcode@gmail.com>
|
||||
Date: Tue, 9 Jul 2019 14:19:01 +0300
|
||||
Subject: [PATCH] Define AT_NO_AUTOMOUNT if needed.
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Old kernel headers don't define this flag, so we do it ourselves in that case.
|
||||
|
||||
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=47445
|
||||
Signed-off-by: Gabriel Ivăncescu <gabrielopcode@gmail.com>
|
||||
---
|
||||
dlls/ntdll/directory.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/dlls/ntdll/directory.c b/dlls/ntdll/directory.c
|
||||
index b50d41bb80..e3f805a48f 100644
|
||||
--- a/dlls/ntdll/directory.c
|
||||
+++ b/dlls/ntdll/directory.c
|
||||
@@ -142,6 +142,10 @@ typedef struct
|
||||
# define O_DIRECTORY 0200000 /* must be directory */
|
||||
#endif
|
||||
|
||||
+#ifndef AT_NO_AUTOMOUNT
|
||||
+#define AT_NO_AUTOMOUNT 0x800
|
||||
+#endif
|
||||
+
|
||||
#endif /* linux */
|
||||
|
||||
#define IS_OPTION_TRUE(ch) ((ch) == 'y' || (ch) == 'Y' || (ch) == 't' || (ch) == 'T' || (ch) == '1')
|
||||
--
|
||||
2.17.1
|
||||
|
@ -0,0 +1,29 @@
|
||||
From 6d875bc78fbd10ff70a51d8c1a937711d0b32f25 Mon Sep 17 00:00:00 2001
|
||||
From: Huw Davies <huw@codeweavers.com>
|
||||
Date: Wed, 10 Jul 2019 09:50:17 +0100
|
||||
Subject: [PATCH] gdi32: Use the correct type for the final parameter of
|
||||
FSOpenResourceFile().
|
||||
|
||||
This is SInt16 for 32-bit, but int for 64-bit.
|
||||
|
||||
Signed-off-by: Huw Davies <huw@codeweavers.com>
|
||||
---
|
||||
dlls/gdi32/freetype.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c
|
||||
index 1162ea790d..e3cff25b76 100644
|
||||
--- a/dlls/gdi32/freetype.c
|
||||
+++ b/dlls/gdi32/freetype.c
|
||||
@@ -818,7 +818,7 @@ static char *find_cache_dir(void)
|
||||
static char **expand_mac_font(const char *path)
|
||||
{
|
||||
FSRef ref;
|
||||
- SInt16 res_ref;
|
||||
+ ResFileRefNum res_ref;
|
||||
OSStatus s;
|
||||
unsigned int idx;
|
||||
const char *out_dir;
|
||||
--
|
||||
2.17.1
|
||||
|
3
patches/mailing-list-patches/definition
Normal file
3
patches/mailing-list-patches/definition
Normal file
@ -0,0 +1,3 @@
|
||||
# These patches will either be dropped or moved to there own directoryes by wine release 4.14.
|
||||
Fixes: Mailing list patches
|
||||
|
@ -168,6 +168,7 @@ patch_enable_all ()
|
||||
enable_libs_Debug_Channel="$1"
|
||||
enable_libs_Unicode_Collation="$1"
|
||||
enable_loader_KeyboardLayouts="$1"
|
||||
enable_mailing_list_patches="$1"
|
||||
enable_mmsystem_dll16_MIDIHDR_Refcount="$1"
|
||||
enable_mountmgr_DosDevices="$1"
|
||||
enable_mscoree_CorValidateImage="$1"
|
||||
@ -634,6 +635,9 @@ patch_enable ()
|
||||
loader-KeyboardLayouts)
|
||||
enable_loader_KeyboardLayouts="$2"
|
||||
;;
|
||||
mailing-list-patches)
|
||||
enable_mailing_list_patches="$2"
|
||||
;;
|
||||
mmsystem.dll16-MIDIHDR_Refcount)
|
||||
enable_mmsystem_dll16_MIDIHDR_Refcount="$2"
|
||||
;;
|
||||
@ -2033,6 +2037,13 @@ if test "$enable_advapi32_Token_Integrity_Level" -eq 1; then
|
||||
enable_advapi32_CreateRestrictedToken=1
|
||||
fi
|
||||
|
||||
if test "$enable_Compiler_Warnings" -eq 1; then
|
||||
if test "$enable_mailing_list_patches" -gt 1; then
|
||||
abort "Patchset mailing-list-patches disabled, but Compiler_Warnings depends on that."
|
||||
fi
|
||||
enable_mailing_list_patches=1
|
||||
fi
|
||||
|
||||
|
||||
# If autoupdate is enabled then create a tempfile to keep track of all patches
|
||||
if test "$enable_patchlist" -eq 1; then
|
||||
@ -2049,8 +2060,73 @@ if test "$enable_patchlist" -eq 1; then
|
||||
fi
|
||||
|
||||
|
||||
# Patchset mailing-list-patches
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * configure.ac, dlls/cryptext/Makefile.in, dlls/cryptext/cryptext.spec, dlls/cryptext/cryptext_main.c,
|
||||
# | dlls/cryptext/tests/Makefile.in, dlls/cryptext/tests/cryptext.c, dlls/d3drm/tests/d3drm.c, dlls/d3drm/viewport.c,
|
||||
# | dlls/dxgi/swapchain.c, dlls/dxgi/tests/dxgi.c, dlls/evr/Makefile.in, dlls/evr/evr.c, dlls/evr/main.c,
|
||||
# | dlls/gdi32/freetype.c, dlls/ntdll/directory.c, dlls/ntoskrnl.exe/ntoskrnl.c, dlls/ntoskrnl.exe/ntoskrnl_private.h,
|
||||
# | dlls/ntoskrnl.exe/pnp.c, dlls/qedit/Makefile.in, dlls/shell32/shell32.spec, dlls/shell32/shlfileop.c,
|
||||
# | dlls/strmbase/strmbase_private.h, dlls/user32/rawinput.c, dlls/user32/tests/input.c, dlls/winebus.sys/bus.h,
|
||||
# | dlls/winebus.sys/bus_iohid.c, dlls/winebus.sys/bus_sdl.c, dlls/winebus.sys/bus_udev.c, dlls/winebus.sys/main.c,
|
||||
# | include/d3drm.h, include/d3drmobj.h, loader/Makefile.in, loader/wine.inf.in, loader/winebus.inf.in,
|
||||
# | programs/wineboot/Makefile.in, programs/wineboot/wineboot.c
|
||||
# |
|
||||
if test "$enable_mailing_list_patches" -eq 1; then
|
||||
patch_apply mailing-list-patches/0001-winebus.inf-Add-new-INF-file-and-copy-it-to-the-INF-.patch
|
||||
patch_apply mailing-list-patches/0002-winebus.sys-Implement-AddDevice.patch
|
||||
patch_apply mailing-list-patches/0003-wineboot-Create-a-root-enumerated-device-object-for-.patch
|
||||
patch_apply mailing-list-patches/0004-winebus.sys-Initialize-and-teardown-the-HID-backends.patch
|
||||
patch_apply mailing-list-patches/0005-ntoskrnl.exe-IoInvalidateDeviceRelations-receives-th.patch
|
||||
patch_apply mailing-list-patches/0006-cryptext-Implement-CryptExtOpenCER.patch
|
||||
patch_apply mailing-list-patches/0007-dxgi-tests-Test-output-after-using-Alt-Enter-to-swit.patch
|
||||
patch_apply mailing-list-patches/0008-dxgi-Fix-possible-null-output-from-d3d11_swapchain_G.patch
|
||||
patch_apply mailing-list-patches/0009-d3drm-Check-for-NULL-pointer-in-d3drm_viewport2_GetD.patch
|
||||
patch_apply mailing-list-patches/0010-d3drm-Check-for-NULL-pointer-in-d3drm_viewport2_GetD.patch
|
||||
patch_apply mailing-list-patches/0011-d3drm-Return-error-if-setting-viewport-field-of-view.patch
|
||||
patch_apply mailing-list-patches/0012-strmbase-Remove-unused-wine-unicode.h-import.patch
|
||||
patch_apply mailing-list-patches/0013-qedit-Build-with-msvcrt.patch
|
||||
patch_apply mailing-list-patches/0014-qedit-Share-source-with-strmbase.patch
|
||||
patch_apply mailing-list-patches/0015-evr-Build-with-msvcrt.patch
|
||||
patch_apply mailing-list-patches/0016-evr-Share-source-with-strmbase.patch
|
||||
patch_apply mailing-list-patches/0017-user32-Also-scan-for-mouse-devices-in-GetRawInputDev.patch
|
||||
patch_apply mailing-list-patches/0018-d3drm-Correct-paramater-count-of-several-interface-d.patch
|
||||
patch_apply mailing-list-patches/0019-shell32-add-SHMultiFileProperties-stub.patch
|
||||
patch_apply mailing-list-patches/0020-winebus.sys-Report-the-native-product-string-for-som.patch
|
||||
patch_apply mailing-list-patches/0021-Define-AT_NO_AUTOMOUNT-if-needed.patch
|
||||
patch_apply mailing-list-patches/0022-gdi32-Use-the-correct-type-for-the-final-parameter-o.patch
|
||||
(
|
||||
printf '%s\n' '+ { "Zebediah Figura", "winebus.inf: Add new INF file and copy it to the INF directory.", 1 },';
|
||||
printf '%s\n' '+ { "Zebediah Figura", "winebus.sys: Implement AddDevice().", 1 },';
|
||||
printf '%s\n' '+ { "Zebediah Figura", "wineboot: Create a root-enumerated device object for winebus.", 1 },';
|
||||
printf '%s\n' '+ { "Zebediah Figura", "winebus.sys: Initialize and teardown the HID backends while the bus FDO is still extant.", 1 },';
|
||||
printf '%s\n' '+ { "Zebediah Figura", "ntoskrnl.exe: IoInvalidateDeviceRelations() receives the parent PDO.", 1 },';
|
||||
printf '%s\n' '+ { "Dmitry Timoshkov", "cryptext: Implement CryptExtOpenCER.", 1 },';
|
||||
printf '%s\n' '+ { "Zhiyi Zhang", "dxgi/tests: Test output after using Alt+Enter to switch fullscreen.", 1 },';
|
||||
printf '%s\n' '+ { "Zhiyi Zhang", "dxgi: Fix possible null output from d3d11_swapchain_GetFullscreenState.", 1 },';
|
||||
printf '%s\n' '+ { "Jeff Smith", "d3drm: Check for NULL pointer in d3drm_viewport2_GetDevice().", 1 },';
|
||||
printf '%s\n' '+ { "Jeff Smith", "d3drm: Check for NULL pointer in d3drm_viewport2_GetDirect3DViewport().", 1 },';
|
||||
printf '%s\n' '+ { "Jeff Smith", "d3drm: Return error if setting viewport field-of-view to zero or negative value.", 1 },';
|
||||
printf '%s\n' '+ { "Zebediah Figura", "strmbase: Remove unused wine/unicode.h import.", 1 },';
|
||||
printf '%s\n' '+ { "Zebediah Figura", "qedit: Build with msvcrt.", 1 },';
|
||||
printf '%s\n' '+ { "Zebediah Figura", "qedit: Share source with strmbase.", 1 },';
|
||||
printf '%s\n' '+ { "Zebediah Figura", "evr: Build with msvcrt.", 1 },';
|
||||
printf '%s\n' '+ { "Zebediah Figura", "evr: Share source with strmbase.", 1 },';
|
||||
printf '%s\n' '+ { "Zebediah Figura", "user32: Also scan for mouse devices in GetRawInputDeviceList().", 1 },';
|
||||
printf '%s\n' '+ { "Jeff Smith", "d3drm: Correct paramater count of several interface defines.", 1 },';
|
||||
printf '%s\n' '+ { "Austin English", "shell32: Add SHMultiFileProperties stub.", 1 },';
|
||||
printf '%s\n' '+ { "Rémi Bernon", "winebus.sys: Report the native product string for some Xbox gamepads.", 1 },';
|
||||
printf '%s\n' '+ { "Gabriel Ivăncescu", "Define AT_NO_AUTOMOUNT if needed.", 1 },';
|
||||
printf '%s\n' '+ { "Huw Davies", "gdi32: Use the correct type for the final parameter of FSOpenResourceFile().", 1 },';
|
||||
) >> "$patchlist"
|
||||
fi
|
||||
|
||||
# Patchset Compiler_Warnings
|
||||
# |
|
||||
# | This patchset has the following (direct or indirect) dependencies:
|
||||
# | * mailing-list-patches
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/d2d1/bitmap.c, dlls/d2d1/brush.c, dlls/d2d1/dc_render_target.c, dlls/d2d1/geometry.c,
|
||||
# | dlls/d2d1/hwnd_render_target.c, dlls/d2d1/state_block.c, dlls/d3d11/view.c, dlls/d3d8/texture.c, dlls/d3d9/texture.c,
|
||||
@ -6503,7 +6579,7 @@ fi
|
||||
# | * [#17823] Assign a drive serial number during prefix creation/update
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * programs/wineboot/wineboot.c
|
||||
# | * programs/wineboot/Makefile.in, programs/wineboot/wineboot.c
|
||||
# |
|
||||
if test "$enable_wineboot_DriveSerial" -eq 1; then
|
||||
patch_apply wineboot-DriveSerial/0001-wineboot-Assign-a-drive-serial-number-during-prefix-.patch
|
||||
@ -6551,7 +6627,7 @@ fi
|
||||
# | * [#42024] Create ProxyEnable key on wineprefix update
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * programs/wineboot/Makefile.in, programs/wineboot/wineboot.c
|
||||
# | * programs/wineboot/wineboot.c
|
||||
# |
|
||||
if test "$enable_wineboot_ProxySettings" -eq 1; then
|
||||
patch_apply wineboot-ProxySettings/0001-wineboot-Initialize-proxy-settings-registry-key.patch
|
||||
|
@ -1,4 +1,4 @@
|
||||
From d2e7f4fe7e71d2bba84f26e8055b0e0ca8cd1005 Mon Sep 17 00:00:00 2001
|
||||
From 58c943a9d3ffc3bd9feae35682710d408448d78a Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Mon, 25 May 2015 06:07:50 +0200
|
||||
Subject: [PATCH] wineboot: Assign a drive serial number during prefix
|
||||
@ -9,18 +9,18 @@ Subject: [PATCH] wineboot: Assign a drive serial number during prefix
|
||||
1 file changed, 32 insertions(+)
|
||||
|
||||
diff --git a/programs/wineboot/wineboot.c b/programs/wineboot/wineboot.c
|
||||
index 834bf92730f..af45f7ff9a9 100644
|
||||
index 5190dcc701..6e54bff187 100644
|
||||
--- a/programs/wineboot/wineboot.c
|
||||
+++ b/programs/wineboot/wineboot.c
|
||||
@@ -69,6 +69,7 @@
|
||||
#include <shobjidl.h>
|
||||
@@ -70,6 +70,7 @@
|
||||
#include <shlwapi.h>
|
||||
#include <shellapi.h>
|
||||
#include <setupapi.h>
|
||||
+#include <ntsecapi.h>
|
||||
#include <newdev.h>
|
||||
#include "resource.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(wineboot);
|
||||
@@ -287,6 +288,36 @@ static void get_namestring( WCHAR *buf )
|
||||
@@ -293,6 +294,36 @@ static void get_namestring( WCHAR *buf )
|
||||
for (i = lstrlenW(buf) - 1; i >= 0 && buf[i] == ' '; i--) buf[i] = 0;
|
||||
}
|
||||
|
||||
@ -57,7 +57,7 @@ index 834bf92730f..af45f7ff9a9 100644
|
||||
/* create the volatile hardware registry keys */
|
||||
static void create_hardware_registry_keys(void)
|
||||
{
|
||||
@@ -1360,6 +1391,7 @@ int __cdecl main( int argc, char *argv[] )
|
||||
@@ -1420,6 +1451,7 @@ int __cdecl main( int argc, char *argv[] )
|
||||
|
||||
ResetEvent( event ); /* in case this is a restart */
|
||||
|
||||
@ -66,5 +66,5 @@ index 834bf92730f..af45f7ff9a9 100644
|
||||
create_dynamic_registry_keys();
|
||||
create_environment_registry_keys();
|
||||
--
|
||||
2.20.1
|
||||
2.17.1
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From d22de677b47898569530c3989ed560e26075c027 Mon Sep 17 00:00:00 2001
|
||||
From 709d05ddf763bcfbcb708158a5302ba4e2587ee1 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Mon, 26 Dec 2016 16:37:40 +0100
|
||||
Subject: [PATCH] wineboot: Initialize proxy settings registry key.
|
||||
@ -9,31 +9,31 @@ Subject: [PATCH] wineboot: Initialize proxy settings registry key.
|
||||
2 files changed, 10 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/programs/wineboot/Makefile.in b/programs/wineboot/Makefile.in
|
||||
index eaea154057f..517010b6823 100644
|
||||
index 3921fa9644..9575b45bec 100644
|
||||
--- a/programs/wineboot/Makefile.in
|
||||
+++ b/programs/wineboot/Makefile.in
|
||||
@@ -1,7 +1,7 @@
|
||||
MODULE = wineboot.exe
|
||||
APPMODE = -mconsole
|
||||
IMPORTS = uuid advapi32
|
||||
-DELAYIMPORTS = shell32 shlwapi version user32
|
||||
+DELAYIMPORTS = shell32 shlwapi version user32 wininet
|
||||
-DELAYIMPORTS = shell32 shlwapi version user32 setupapi newdev
|
||||
+DELAYIMPORTS = shell32 shlwapi version user32 setupapi newdev wininet
|
||||
|
||||
EXTRADLLFLAGS = -mno-cygwin
|
||||
|
||||
diff --git a/programs/wineboot/wineboot.c b/programs/wineboot/wineboot.c
|
||||
index fb67051e7d0..9302f8703a9 100644
|
||||
index ab255ac107..d85be900e0 100644
|
||||
--- a/programs/wineboot/wineboot.c
|
||||
+++ b/programs/wineboot/wineboot.c
|
||||
@@ -70,6 +70,7 @@
|
||||
#include <shlwapi.h>
|
||||
@@ -71,6 +71,7 @@
|
||||
#include <shellapi.h>
|
||||
#include <setupapi.h>
|
||||
#include <ntsecapi.h>
|
||||
+#include <wininet.h>
|
||||
#include <newdev.h>
|
||||
#include "resource.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(wineboot);
|
||||
@@ -690,6 +691,13 @@ static void create_volatile_environment_registry_key(void)
|
||||
@@ -595,6 +596,13 @@ static void create_volatile_environment_registry_key(void)
|
||||
RegCloseKey( hkey );
|
||||
}
|
||||
|
||||
@ -47,7 +47,7 @@ index fb67051e7d0..9302f8703a9 100644
|
||||
static void create_etc_stub_files(void)
|
||||
{
|
||||
static const WCHAR drivers_etcW[] = {'\\','d','r','i','v','e','r','s','\\','e','t','c',0};
|
||||
@@ -1548,6 +1556,7 @@ int __cdecl main( int argc, char *argv[] )
|
||||
@@ -1505,6 +1513,7 @@ int __cdecl main( int argc, char *argv[] )
|
||||
if (init || update) update_wineprefix( update );
|
||||
|
||||
create_volatile_environment_registry_key();
|
||||
@ -56,5 +56,5 @@ index fb67051e7d0..9302f8703a9 100644
|
||||
ProcessRunKeys( HKEY_LOCAL_MACHINE, RunOnceW, TRUE, TRUE );
|
||||
|
||||
--
|
||||
2.20.1
|
||||
2.17.1
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 8502098a799563ce96eaa0ecc891f0ec3b905511 Mon Sep 17 00:00:00 2001
|
||||
From f1ad4754966ca722ec8f119e15ad789efaadb275 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Wed, 13 May 2015 06:58:16 +0200
|
||||
Subject: [PATCH] wineboot: Init
|
||||
@ -6,14 +6,14 @@ Subject: [PATCH] wineboot: Init
|
||||
|
||||
Based on a patch by Jactry Zeng.
|
||||
---
|
||||
programs/wineboot/wineboot.c | 38 ++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 38 insertions(+)
|
||||
programs/wineboot/wineboot.c | 36 ++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 36 insertions(+)
|
||||
|
||||
diff --git a/programs/wineboot/wineboot.c b/programs/wineboot/wineboot.c
|
||||
index 0fc762096df..fb67051e7d0 100644
|
||||
index fc3211c9fd0..374ad3b0479 100644
|
||||
--- a/programs/wineboot/wineboot.c
|
||||
+++ b/programs/wineboot/wineboot.c
|
||||
@@ -690,6 +690,41 @@ static void create_volatile_environment_registry_key(void)
|
||||
@@ -696,6 +696,41 @@ static void create_volatile_environment_registry_key(void)
|
||||
RegCloseKey( hkey );
|
||||
}
|
||||
|
||||
@ -55,16 +55,14 @@ index 0fc762096df..fb67051e7d0 100644
|
||||
/* Performs the rename operations dictated in %SystemRoot%\Wininit.ini.
|
||||
* Returns FALSE if there was an error, or otherwise if all is ok.
|
||||
*/
|
||||
@@ -1287,6 +1322,9 @@ static void update_wineprefix( BOOL force )
|
||||
}
|
||||
DestroyWindow( hwnd );
|
||||
@@ -1346,6 +1381,7 @@ static void update_wineprefix( BOOL force )
|
||||
}
|
||||
+
|
||||
|
||||
install_root_pnp_devices();
|
||||
+ create_etc_stub_files();
|
||||
+
|
||||
|
||||
WINE_MESSAGE( "wine: configuration in '%s' has been updated.\n", prettyprint_configdir() );
|
||||
}
|
||||
|
||||
--
|
||||
2.20.1
|
||||
2.17.1
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user