diff --git a/reactos/lib/kernel32/file/mailslot.c b/reactos/lib/kernel32/file/mailslot.c index 77338a6a7b6..257689a7d2f 100644 --- a/reactos/lib/kernel32/file/mailslot.c +++ b/reactos/lib/kernel32/file/mailslot.c @@ -167,10 +167,12 @@ SetMailslotInfo(HANDLE hMailslot, DWORD lReadTimeout) { FILE_MAILSLOT_SET_INFORMATION Buffer; + LARGE_INTEGER Timeout; IO_STATUS_BLOCK Iosb; NTSTATUS Status; - Buffer.ReadTimeout.QuadPart = lReadTimeout * -10000; + Timeout.QuadPart = lReadTimeout * -10000; + Buffer.ReadTimeout = &Timeout; Status = NtSetInformationFile(hMailslot, &Iosb, diff --git a/reactos/ntoskrnl/io/device.c b/reactos/ntoskrnl/io/device.c index 219251eef54..2f1ce1056d0 100644 --- a/reactos/ntoskrnl/io/device.c +++ b/reactos/ntoskrnl/io/device.c @@ -336,17 +336,17 @@ IoAttachDeviceToDeviceStackSafe(IN PDEVICE_OBJECT SourceDevice, OUT PDEVICE_OBJECT *AttachedToDeviceObject) { PDEVICE_OBJECT AttachedDevice; - PDEVOBJ_EXTENSION SourceDeviceExtension; + PEXTENDED_DEVOBJ_EXTENSION SourceDeviceExtension; DPRINT("IoAttachDeviceToDeviceStack(SourceDevice 0x%p, TargetDevice 0x%p)\n", SourceDevice, TargetDevice); /* Get the Attached Device and source extension */ AttachedDevice = IoGetAttachedDevice(TargetDevice); - SourceDeviceExtension = SourceDevice->DeviceObjectExtension; + SourceDeviceExtension = (PEXTENDED_DEVOBJ_EXTENSION)SourceDevice->DeviceObjectExtension; /* Make sure that it's in a correct state */ - if (!(AttachedDevice->DeviceObjectExtension->ExtensionFlags & + if (!(((PEXTENDED_DEVOBJ_EXTENSION)AttachedDevice->DeviceObjectExtension)->ExtensionFlags & (DOE_UNLOAD_PENDING | DOE_DELETE_PENDING | DOE_REMOVE_PENDING | DOE_REMOVE_PROCESSED))) { @@ -624,7 +624,7 @@ IoDeleteDevice(PDEVICE_OBJECT DeviceObject) } /* I guess this should be removed later... but it shouldn't cause problems */ - DeviceObject->DeviceObjectExtension->ExtensionFlags |= DOE_DELETE_PENDING; + ((PEXTENDED_DEVOBJ_EXTENSION)DeviceObject->DeviceObjectExtension)->ExtensionFlags |= DOE_DELETE_PENDING; /* Make the object temporary. This should automatically remove the device from the namespace */ @@ -650,7 +650,7 @@ IoDetachDevice(PDEVICE_OBJECT TargetDevice) DPRINT("IoDetachDevice(TargetDevice 0x%p)\n", TargetDevice); /* Remove the attachment */ - TargetDevice->AttachedDevice->DeviceObjectExtension->AttachedTo = NULL; + ((PEXTENDED_DEVOBJ_EXTENSION)TargetDevice->AttachedDevice->DeviceObjectExtension)->AttachedTo = NULL; TargetDevice->AttachedDevice = NULL; } @@ -758,7 +758,7 @@ STDCALL IoGetDeviceAttachmentBaseRef(IN PDEVICE_OBJECT DeviceObject) { /* Return the attached Device */ - return (DeviceObject->DeviceObjectExtension->AttachedTo); + return (((PEXTENDED_DEVOBJ_EXTENSION)DeviceObject->DeviceObjectExtension)->AttachedTo); } /* @@ -790,7 +790,7 @@ STDCALL IoGetDiskDeviceObject(IN PDEVICE_OBJECT FileSystemDeviceObject, OUT PDEVICE_OBJECT *DiskDeviceObject) { - PDEVOBJ_EXTENSION DeviceExtension; + PEXTENDED_DEVOBJ_EXTENSION DeviceExtension; PVPB Vpb; KIRQL OldIrql; @@ -801,7 +801,7 @@ IoGetDiskDeviceObject(IN PDEVICE_OBJECT FileSystemDeviceObject, IoAcquireVpbSpinLock(&OldIrql); /* Get the Device Extension */ - DeviceExtension = FileSystemDeviceObject->DeviceObjectExtension; + DeviceExtension = (PEXTENDED_DEVOBJ_EXTENSION)FileSystemDeviceObject->DeviceObjectExtension; /* Make sure this one has a VPB too */ Vpb = DeviceExtension->Vpb; @@ -825,7 +825,7 @@ PDEVICE_OBJECT STDCALL IoGetLowerDeviceObject(IN PDEVICE_OBJECT DeviceObject) { - PDEVOBJ_EXTENSION DeviceExtension = DeviceObject->DeviceObjectExtension; + PEXTENDED_DEVOBJ_EXTENSION DeviceExtension = (PEXTENDED_DEVOBJ_EXTENSION)DeviceObject->DeviceObjectExtension; PDEVICE_OBJECT LowerDeviceObject = NULL; /* Make sure it's not getting deleted */ diff --git a/reactos/ntoskrnl/io/deviface.c b/reactos/ntoskrnl/io/deviface.c index 9971f19e839..37c385671a1 100644 --- a/reactos/ntoskrnl/io/deviface.c +++ b/reactos/ntoskrnl/io/deviface.c @@ -618,8 +618,8 @@ IoRegisterDeviceInterface( ASSERT(PdoNameInfo->Name.Length); /* Create base key name for this interface: HKLM\SYSTEM\CurrentControlSet\Control\DeviceClasses\{GUID} */ - ASSERT(PhysicalDeviceObject->DeviceObjectExtension->DeviceNode); - InstancePath = &PhysicalDeviceObject->DeviceObjectExtension->DeviceNode->InstancePath; + ASSERT(((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode); + InstancePath = &((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode->InstancePath; BaseKeyName.Length = wcslen(BaseKeyString) * sizeof(WCHAR); BaseKeyName.MaximumLength = BaseKeyName.Length + GuidString.Length; diff --git a/reactos/ntoskrnl/io/file.c b/reactos/ntoskrnl/io/file.c index 77478230fdb..e7911c72f8b 100644 --- a/reactos/ntoskrnl/io/file.c +++ b/reactos/ntoskrnl/io/file.c @@ -751,7 +751,7 @@ IoCreateFile(OUT PHANDLE FileHandle, PFILE_OBJECT FileObject = NULL; PDEVICE_OBJECT DeviceObject; PIRP Irp; - PIO_STACK_LOCATION StackLoc; + PEXTENDED_IO_STACK_LOCATION StackLoc; IO_SECURITY_CONTEXT SecurityContext; KPROCESSOR_MODE AccessMode; HANDLE LocalHandle; @@ -999,7 +999,7 @@ IoCreateFile(OUT PHANDLE FileHandle, * Get the stack location for the new * IRP and prepare it. */ - StackLoc = IoGetNextIrpStackLocation(Irp); + StackLoc = (PEXTENDED_IO_STACK_LOCATION)IoGetNextIrpStackLocation(Irp); StackLoc->MinorFunction = 0; StackLoc->Flags = (UCHAR)Options; StackLoc->Control = 0; diff --git a/reactos/ntoskrnl/io/plugplay.c b/reactos/ntoskrnl/io/plugplay.c index 42ba023cd84..02532b9c25d 100644 --- a/reactos/ntoskrnl/io/plugplay.c +++ b/reactos/ntoskrnl/io/plugplay.c @@ -439,7 +439,7 @@ IopGetRelatedDevice(PPLUGPLAY_CONTROL_RELATED_DEVICE_DATA RelatedDeviceData) if (DeviceObject == NULL) return STATUS_NO_SUCH_DEVICE; - DeviceNode = DeviceObject->DeviceObjectExtension->DeviceNode; + DeviceNode = ((PEXTENDED_DEVOBJ_EXTENSION)DeviceObject->DeviceObjectExtension)->DeviceNode; } switch (RelatedDeviceData->Relation) @@ -518,7 +518,7 @@ IopDeviceStatus(PPLUGPLAY_CONTROL_STATUS_DATA StatusData) if (DeviceObject == NULL) return STATUS_NO_SUCH_DEVICE; - DeviceNode = DeviceObject->DeviceObjectExtension->DeviceNode; + DeviceNode = ((PEXTENDED_DEVOBJ_EXTENSION)DeviceObject->DeviceObjectExtension)->DeviceNode; switch (StatusData->Operation) { @@ -559,7 +559,7 @@ IopGetDeviceDepth(PPLUGPLAY_CONTROL_DEPTH_DATA DepthData) if (DeviceObject == NULL) return STATUS_NO_SUCH_DEVICE; - DeviceNode = DeviceObject->DeviceObjectExtension->DeviceNode; + DeviceNode = ((PEXTENDED_DEVOBJ_EXTENSION)DeviceObject->DeviceObjectExtension)->DeviceNode; DepthData->Depth = DeviceNode->Level; diff --git a/reactos/ntoskrnl/io/pnpmgr.c b/reactos/ntoskrnl/io/pnpmgr.c index b1768f32b7d..efd80b64641 100644 --- a/reactos/ntoskrnl/io/pnpmgr.c +++ b/reactos/ntoskrnl/io/pnpmgr.c @@ -30,7 +30,7 @@ PDEVICE_NODE FASTCALL IopGetDeviceNode( PDEVICE_OBJECT DeviceObject) { - return DeviceObject->DeviceObjectExtension->DeviceNode; + return ((PEXTENDED_DEVOBJ_EXTENSION)DeviceObject->DeviceObjectExtension)->DeviceNode; } NTSTATUS @@ -619,7 +619,7 @@ IopCreateDeviceNode(PDEVICE_NODE ParentNode, Node->PhysicalDeviceObject = PhysicalDeviceObject; - PhysicalDeviceObject->DeviceObjectExtension->DeviceNode = Node; + ((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode = Node; if (ParentNode) { diff --git a/reactos/w32api/include/ddk/winddk.h b/reactos/w32api/include/ddk/winddk.h index 5c14261dac3..569d4e6974c 100644 --- a/reactos/w32api/include/ddk/winddk.h +++ b/reactos/w32api/include/ddk/winddk.h @@ -2668,6 +2668,13 @@ typedef struct _ERESOURCE { KSPIN_LOCK SpinLock; } ERESOURCE, *PERESOURCE; +typedef struct _DEVOBJ_EXTENSION +{ + CSHORT Type; + USHORT Size; + PDEVICE_OBJECT DeviceObject; +} DEVOBJ_EXTENSION, *PDEVOBJ_EXTENSION; + typedef struct _DRIVER_EXTENSION { struct _DRIVER_OBJECT *DriverObject; PDRIVER_ADD_DEVICE AddDevice; diff --git a/reactos/w32api/include/ntdef.h b/reactos/w32api/include/ntdef.h index 91d4e343aa3..4ec1b66b4a3 100644 --- a/reactos/w32api/include/ntdef.h +++ b/reactos/w32api/include/ntdef.h @@ -8,6 +8,7 @@ #define RESTRICTED_POINTER #define NTAPI __stdcall + #define OBJ_INHERIT 0x00000002 #define OBJ_PERMANENT 0x00000010 #define OBJ_EXCLUSIVE 0x00000020