From: Connor McAdams <cmcadams@codeweavers.com> Signed-off-by: Connor McAdams <cmcadams@codeweavers.com> --- dlls/ntoskrnl.exe/tests/driver.c | 27 +++++++++++++++++++++++++++ dlls/ntoskrnl.exe/tests/driver_pnp.c | 9 +++++++++ 2 files changed, 36 insertions(+) diff --git a/dlls/ntoskrnl.exe/tests/driver.c b/dlls/ntoskrnl.exe/tests/driver.c index 030c6476a52..882af32eaa7 100644 --- a/dlls/ntoskrnl.exe/tests/driver.c +++ b/dlls/ntoskrnl.exe/tests/driver.c @@ -1855,17 +1855,30 @@ static void test_completion(void) static void test_IoAttachDeviceToDeviceStack(void) { DEVICE_OBJECT *dev1, *dev2, *dev3, *ret; + DEVOBJ_EXTENSION *ext1, *ext2, *ext3; NTSTATUS status; status = IoCreateDevice(driver_obj, 0, NULL, FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN, FALSE, &dev1); ok(status == STATUS_SUCCESS, "IoCreateDevice failed\n"); + todo_wine ok(!!dev1->DeviceObjectExtension, "Got NULL DeviceObjectExtension.\n"); + ext1 = dev1->DeviceObjectExtension; status = IoCreateDevice(driver_obj, 0, NULL, FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN, FALSE, &dev2); ok(status == STATUS_SUCCESS, "IoCreateDevice failed\n"); + todo_wine ok(!!dev2->DeviceObjectExtension, "Got NULL DeviceObjectExtension.\n"); + ext2 = dev2->DeviceObjectExtension; status = IoCreateDevice(driver_obj, 0, NULL, FILE_DEVICE_UNKNOWN, FILE_DEVICE_SECURE_OPEN, FALSE, &dev3); ok(status == STATUS_SUCCESS, "IoCreateDevice failed\n"); + todo_wine ok(!!dev3->DeviceObjectExtension, "Got NULL DeviceObjectExtension.\n"); + ext3 = dev3->DeviceObjectExtension; + if (ext1) + { + ok(!ext1->AttachedTo, "Unexpected AttachedTo %p.\n", ext1->AttachedTo); + ok(!ext2->AttachedTo, "Unexpected AttachedTo %p.\n", ext2->AttachedTo); + ok(!ext3->AttachedTo, "Unexpected AttachedTo %p.\n", ext3->AttachedTo); + } /* TODO: initialize devices properly */ dev1->Flags &= ~DO_DEVICE_INITIALIZING; @@ -1875,7 +1888,11 @@ static void test_IoAttachDeviceToDeviceStack(void) ok(ret == dev1, "IoAttachDeviceToDeviceStack returned %p, expected %p\n", ret, dev1); ok(dev1->AttachedDevice == dev2, "dev1->AttachedDevice = %p, expected %p\n", dev1->AttachedDevice, dev2); + if (ext1) + ok(!ext1->AttachedTo, "Unexpected AttachedTo %p.\n", ext1->AttachedTo); ok(!dev2->AttachedDevice, "dev2->AttachedDevice = %p\n", dev2->AttachedDevice); + if (ext2) + ok(ext2->AttachedTo == dev1, "Unexpected AttachedTo %p.\n", ext2->AttachedTo); ok(dev1->StackSize == 1, "dev1->StackSize = %d\n", dev1->StackSize); ok(dev2->StackSize == 2, "dev2->StackSize = %d\n", dev2->StackSize); @@ -1883,9 +1900,15 @@ static void test_IoAttachDeviceToDeviceStack(void) ok(ret == dev2, "IoAttachDeviceToDeviceStack returned %p, expected %p\n", ret, dev2); ok(dev1->AttachedDevice == dev2, "dev1->AttachedDevice = %p, expected %p\n", dev1->AttachedDevice, dev2); + if (ext1) + ok(!ext1->AttachedTo, "Unexpected AttachedTo %p.\n", ext1->AttachedTo); ok(dev2->AttachedDevice == dev3, "dev2->AttachedDevice = %p, expected %p\n", dev2->AttachedDevice, dev3); + if (ext2) + ok(ext2->AttachedTo == dev1, "Unexpected AttachedTo %p.\n", ext2->AttachedTo); ok(!dev3->AttachedDevice, "dev3->AttachedDevice = %p\n", dev3->AttachedDevice); + if (ext3) + ok(ext3->AttachedTo == dev2, "Unexpected AttachedTo %p.\n", ext3->AttachedTo); ok(dev1->StackSize == 1, "dev1->StackSize = %d\n", dev1->StackSize); ok(dev2->StackSize == 2, "dev2->StackSize = %d\n", dev2->StackSize); ok(dev3->StackSize == 3, "dev3->StackSize = %d\n", dev3->StackSize); @@ -1893,9 +1916,13 @@ static void test_IoAttachDeviceToDeviceStack(void) IoDetachDevice(dev1); ok(!dev1->AttachedDevice, "dev1->AttachedDevice = %p\n", dev1->AttachedDevice); ok(dev2->AttachedDevice == dev3, "dev2->AttachedDevice = %p\n", dev2->AttachedDevice); + if (ext2) + ok(!ext2->AttachedTo, "Unexpected AttachedTo %p.\n", ext2->AttachedTo); IoDetachDevice(dev2); ok(!dev2->AttachedDevice, "dev2->AttachedDevice = %p\n", dev2->AttachedDevice); + if (ext3) + ok(!ext3->AttachedTo, "Unexpected AttachedTo %p.\n", ext3->AttachedTo); ok(dev1->StackSize == 1, "dev1->StackSize = %d\n", dev1->StackSize); ok(dev2->StackSize == 2, "dev2->StackSize = %d\n", dev2->StackSize); ok(dev3->StackSize == 3, "dev3->StackSize = %d\n", dev3->StackSize); diff --git a/dlls/ntoskrnl.exe/tests/driver_pnp.c b/dlls/ntoskrnl.exe/tests/driver_pnp.c index c87d3b58d91..d166a1ae4b9 100644 --- a/dlls/ntoskrnl.exe/tests/driver_pnp.c +++ b/dlls/ntoskrnl.exe/tests/driver_pnp.c @@ -1169,12 +1169,15 @@ static NTSTATUS WINAPI driver_ioctl(DEVICE_OBJECT *device, IRP *irp) static NTSTATUS WINAPI driver_add_device(DRIVER_OBJECT *driver, DEVICE_OBJECT *pdo) { + DEVOBJ_EXTENSION *pdo_ext = pdo->DeviceObjectExtension; + DEVOBJ_EXTENSION *fdo_ext; NTSTATUS ret; todo_wine ok(!!(pdo->Flags & DO_BUS_ENUMERATED_DEVICE), "Unexpected pdo flags %#lx.\n", pdo->Flags); if ((ret = IoCreateDevice(driver, 0, NULL, FILE_DEVICE_BUS_EXTENDER, 0, FALSE, &bus_fdo))) return ret; + fdo_ext = bus_fdo->DeviceObjectExtension; if ((ret = IoRegisterDeviceInterface(pdo, &control_class, NULL, &control_symlink))) { IoDeleteDevice(bus_fdo); @@ -1182,6 +1185,12 @@ static NTSTATUS WINAPI driver_add_device(DRIVER_OBJECT *driver, DEVICE_OBJECT *p } IoAttachDeviceToDeviceStack(bus_fdo, pdo); + ok(pdo->AttachedDevice == bus_fdo, "Unexpected AttachedDevice %p.\n", pdo->AttachedDevice); + if (pdo_ext) + ok(!pdo_ext->AttachedTo, "Unexpected AttachedTo %p.\n", pdo_ext->AttachedTo); + ok(!bus_fdo->AttachedDevice, "Unexpected AttachedDevice %p.\n", bus_fdo->AttachedDevice); + if (fdo_ext) + ok(fdo_ext->AttachedTo == pdo, "Unexpected AttachedTo %p.\n", fdo_ext->AttachedTo); bus_pdo = pdo; bus_fdo->Flags &= ~DO_DEVICE_INITIALIZING; return STATUS_SUCCESS; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11263