- Fix DEVICE_NODE definition to remove ROS-only fields
- Move RTL_HEAP_PARAMETERS to umtypes.h
- Fix PROCESS_PRIORITY_CLASS_XXX definitions.
- Use PROCESS_PRIORITY_CLASS_INVALID in process creation code.
- Move and correct EX_PUSH_LOCK definition to ntifs.h
- Define KQUEUE along with KAPC_STATE if ntifs.h is not used, so that we
don't force its usage
- Enable usage of EX_QUEUE_WORKER_INFO and EX_WORK_QUEUE without
requiring the IFS.
- Fix definition of CsrClientConnectToServer
- Update NDK FIXME list
- Define and use a list of Bus Type GUIDs instead of saving the GUID in
a ROS-only field of DEVICE_NODE.
- Use a IRP_MN_QUERY_CAPABILITIES PnP IRP to get the Address of a
DeviceNode, intead of saving it inside a ROS-only field.
Modified: trunk/reactos/include/ndk/extypes.h
Modified: trunk/reactos/include/ndk/fixmes.txt
Modified: trunk/reactos/include/ndk/iotypes.h
Modified: trunk/reactos/include/ndk/ketypes.h
Modified: trunk/reactos/include/ndk/pstypes.h
Modified: trunk/reactos/include/ndk/rtltypes.h
Modified: trunk/reactos/include/ndk/umfuncs.h
Modified: trunk/reactos/include/ndk/umtypes.h
Modified: trunk/reactos/lib/kernel32/process/create.c
Modified: trunk/reactos/lib/ntdll/csr/lpc.c
Modified: trunk/reactos/ntoskrnl/include/internal/io.h
Modified: trunk/reactos/ntoskrnl/io/pnpmgr.c
Modified: trunk/reactos/w32api/include/ddk/ntifs.h
_____
Modified: trunk/reactos/include/ndk/extypes.h
--- trunk/reactos/include/ndk/extypes.h 2005-08-10 22:15:12 UTC (rev
17271)
+++ trunk/reactos/include/ndk/extypes.h 2005-08-11 00:01:17 UTC (rev
17272)
@@ -38,10 +38,9 @@
/* You'll need the IFS for this, so use an equivalent version */
#ifndef _NTIFS_
typedef PVOID EX_RUNDOWN_REF;
+typedef PVOID EX_PUSH_LOCK;
#endif
-/* You'll need the IFS for these, so let's not force everyone to have
it */
-#ifdef _NTIFS_
typedef struct _EX_QUEUE_WORKER_INFO
{
UCHAR QueueDisabled:1;
@@ -59,7 +58,6 @@
ULONG QueueDepthLastPass;
EX_QUEUE_WORKER_INFO Info;
} EX_WORK_QUEUE, *PEX_WORK_QUEUE;
-#endif
typedef struct _EX_FAST_REF
{
@@ -71,21 +69,6 @@
};
} EX_FAST_REF, *PEX_FAST_REF;
-typedef struct _EX_PUSH_LOCK
-{
- union
- {
- struct
- {
- ULONG Waiting:1;
- ULONG Exclusive:1;
- ULONG Shared:30;
- };
- ULONG Value;
- PVOID Ptr;
- };
-} EX_PUSH_LOCK, *PEX_PUSH_LOCK;
-
typedef struct _HANDLE_TABLE_ENTRY_INFO
{
ULONG AuditMask;
_____
Modified: trunk/reactos/include/ndk/fixmes.txt
--- trunk/reactos/include/ndk/fixmes.txt 2005-08-10 22:15:12 UTC
(rev 17271)
+++ trunk/reactos/include/ndk/fixmes.txt 2005-08-11 00:01:17 UTC
(rev 17272)
@@ -2,8 +2,8 @@
-----------
Order:
- * Priority 1 = Easiest to fix.
- * Priority 5 = Hardest to fix.
+ * Priority 1 = Most important to fix.
+ * Priority 5 = Least important to fix.
Format:
<Priority Level>
@@ -19,7 +19,7 @@
- FIXED: Some files need cleanup (Alex + Eric) [zwfuncs.h,
rtlfuncs.h, rtltypes.h]
Priority 2:
- - DEVICE_NODE has 2 fields not part of NT's defintion
[iotypes.h]
+ - FIXED: DEVICE_NODE has 2 fields not part of NT's defintion
(Alex) [iotypes.h]
- Object Callbacks don't match NT's (Alex) [obtypes.h]
- Remove Create Callback Hack (Alex) [obtypes.h]
- Object header doesn't match NT (Alex) [obtypes.h] blocks on ->
@@ -32,9 +32,9 @@
Priority 4:
- FIXED: Kernel and Memory Types are not architecture-specific
(Eric) [ketypes.h, mmtypes.h]
- - Win32K Builds with windows.h (Filip, bugzilla id 666)
[extypes.h, ketypes.h]
+ - FIXED: Win32K Builds with windows.h (Filip) [extypes.h,
ketypes.h]
Priority 5:
- LPC Types are totally wrong. [lpctypes.h]
- Missing System Info Classes [zwtypes.h]
- - Process Priority Classes are messed up (Alex) [pstypes.h]
+ - FIXED: Process Priority Classes are messed up (Alex)
[pstypes.h]
_____
Modified: trunk/reactos/include/ndk/iotypes.h
--- trunk/reactos/include/ndk/iotypes.h 2005-08-10 22:15:12 UTC (rev
17271)
+++ trunk/reactos/include/ndk/iotypes.h 2005-08-11 00:01:17 UTC (rev
17272)
@@ -207,10 +207,6 @@
ULONG DriverUnloadRetryCount;
struct _DEVICE_NODE *PreviousParent;
ULONG DeletedChidren;
-
- /* FIXME: Not NT's */
- GUID BusTypeGuid;
- ULONG Address;
} DEVICE_NODE, *PDEVICE_NODE;
typedef struct _PI_RESOURCE_ARBITER_ENTRY
_____
Modified: trunk/reactos/include/ndk/ketypes.h
--- trunk/reactos/include/ndk/ketypes.h 2005-08-10 22:15:12 UTC (rev
17271)
+++ trunk/reactos/include/ndk/ketypes.h 2005-08-11 00:01:17 UTC (rev
17272)
@@ -63,7 +63,7 @@
CurrentApcEnvironment
} KAPC_ENVIRONMENT;
-/* We don't want to force NTIFS usage only for a single structure */
+/* We don't want to force NTIFS usage only for two structures */
#ifndef _NTIFS_
typedef struct _KAPC_STATE
{
@@ -73,6 +73,15 @@
BOOLEAN KernelApcPending;
BOOLEAN UserApcPending;
} KAPC_STATE, *PKAPC_STATE, *RESTRICTED_POINTER PRKAPC_STATE;
+
+typedef struct _KQUEUE
+{
+ DISPATCHER_HEADER Header;
+ LIST_ENTRY EntryListHead;
+ ULONG CurrentCount;
+ ULONG MaximumCount;
+ LIST_ENTRY ThreadListHead;
+} KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
#endif
typedef struct _KNODE
_____
Modified: trunk/reactos/include/ndk/pstypes.h
--- trunk/reactos/include/ndk/pstypes.h 2005-08-10 22:15:12 UTC (rev
17271)
+++ trunk/reactos/include/ndk/pstypes.h 2005-08-11 00:01:17 UTC (rev
17272)
@@ -36,12 +36,13 @@
#define USER_SHARED_DATA (0x7FFE0000)
/* Process priority classes */
-#define PROCESS_PRIORITY_CLASS_IDLE 0
-#define PROCESS_PRIORITY_CLASS_BELOW_NORMAL 1
-#define PROCESS_PRIORITY_CLASS_NORMAL 2
-#define PROCESS_PRIORITY_CLASS_ABOVE_NORMAL 3
-#define PROCESS_PRIORITY_CLASS_HIGH 4
-#define PROCESS_PRIORITY_CLASS_REALTIME 5
+#define PROCESS_PRIORITY_CLASS_INVALID 0
+#define PROCESS_PRIORITY_CLASS_IDLE 1
+#define PROCESS_PRIORITY_CLASS_NORMAL 2
+#define PROCESS_PRIORITY_CLASS_HIGH 3
+#define PROCESS_PRIORITY_CLASS_REALTIME 4
+#define PROCESS_PRIORITY_CLASS_BELOW_NORMAL 5
+#define PROCESS_PRIORITY_CLASS_ABOVE_NORMAL 6
/* Global Flags */
#define FLG_STOP_ON_EXCEPTION 0x00000001
_____
Modified: trunk/reactos/include/ndk/rtltypes.h
--- trunk/reactos/include/ndk/rtltypes.h 2005-08-10 22:15:12 UTC
(rev 17271)
+++ trunk/reactos/include/ndk/rtltypes.h 2005-08-11 00:01:17 UTC
(rev 17272)
@@ -40,11 +40,11 @@
#define EXCEPTION_TARGET_UNWIND 0x20
#define EXCEPTION_COLLIDED_UNWIND 0x20
-#define EH_NONCONTINUABLE 0x01
-#define EH_UNWINDING 0x02
-#define EH_EXIT_UNWIND 0x04
-#define EH_STACK_INVALID 0x08
-#define EH_NESTED_CALL 0x10
+#define EH_NONCONTINUABLE 0x01
+#define EH_UNWINDING 0x02
+#define EH_EXIT_UNWIND 0x04
+#define EH_STACK_INVALID 0x08
+#define EH_NESTED_CALL 0x10
#define RTL_RANGE_LIST_ADD_IF_CONFLICT 0x00000001
#define RTL_RANGE_LIST_ADD_SHARED 0x00000002
@@ -109,20 +109,16 @@
PVOID Parameter
);
-#ifndef _NTIFS_
-typedef NTSTATUS
-(NTAPI * PRTL_HEAP_COMMIT_ROUTINE) (
- IN PVOID Base,
- IN OUT PVOID *CommitAddress,
- IN OUT PSIZE_T CommitSize
-);
-#endif
-
/* TYPES
*********************************************************************/
typedef unsigned short RTL_ATOM;
typedef unsigned short *PRTL_ATOM;
+/* Once again, we don't want to force NTIFS for something like this */
+#if !defined(_NTIFS_) && !defined(NTOS_MODE_USER)
+typedef PVOID PRTL_HEAP_PARAMETERS;
+#endif
+
typedef ACL_REVISION_INFORMATION *PACL_REVISION_INFORMATION;
typedef ACL_SIZE_INFORMATION *PACL_SIZE_INFORMATION;
typedef struct _ACE
@@ -402,22 +398,6 @@
PRTL_ATOM_TABLE_ENTRY Buckets[1];
} RTL_ATOM_TABLE, *PRTL_ATOM_TABLE;
-#ifndef _NTIFS_
-typedef struct _RTL_HEAP_PARAMETERS {
- ULONG Length;
- SIZE_T SegmentReserve;
- SIZE_T SegmentCommit;
- SIZE_T DeCommitFreeBlockThreshold;
- SIZE_T DeCommitTotalFreeThreshold;
- SIZE_T MaximumAllocationSize;
- SIZE_T VirtualMemoryThreshold;
- SIZE_T InitialCommit;
- SIZE_T InitialReserve;
- PRTL_HEAP_COMMIT_ROUTINE CommitRoutine;
- SIZE_T Reserved[2];
-} RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS;
-#endif
-
/* Let Kernel Drivers use this */
#ifndef _WINBASE_
typedef struct _SYSTEMTIME
_____
Modified: trunk/reactos/include/ndk/umfuncs.h
--- trunk/reactos/include/ndk/umfuncs.h 2005-08-10 22:15:12 UTC (rev
17271)
+++ trunk/reactos/include/ndk/umfuncs.h 2005-08-11 00:01:17 UTC (rev
17272)
@@ -25,7 +25,7 @@
PVOID Unknown,
PVOID Context,
ULONG ContextLength,
- PULONG Unknown2
+ PBOOLEAN ServerToServerCall
);
NTSTATUS
_____
Modified: trunk/reactos/include/ndk/umtypes.h
--- trunk/reactos/include/ndk/umtypes.h 2005-08-10 22:15:12 UTC (rev
17271)
+++ trunk/reactos/include/ndk/umtypes.h 2005-08-11 00:01:17 UTC (rev
17272)
@@ -48,7 +48,7 @@
#define NT_WARNING(x) ((ULONG)(x)>>30==2)
#define NT_ERROR(x) ((ULONG)(x)>>30==3)
-/* Object Access Rights FIXME: Some are in w32api's psdk..,is that
normal ?*/
+/* Object Access Rights */
#define DIRECTORY_QUERY (0x0001)
#define DIRECTORY_TRAVERSE (0x0002)
#define DIRECTORY_CREATE_OBJECT (0x0004)
@@ -1418,7 +1418,28 @@
PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;
} UNICODE_PREFIX_TABLE, *PUNICODE_PREFIX_TABLE;
-/* FIXME - need FAST_MUTEX and PHANDLE_TABLE for RTL_ATOM_TABLE in
umode! */
+typedef NTSTATUS
+(NTAPI * PRTL_HEAP_COMMIT_ROUTINE)(
+ IN PVOID Base,
+ IN OUT PVOID *CommitAddress,
+ IN OUT PSIZE_T CommitSize
+);
+
+typedef struct _RTL_HEAP_PARAMETERS
+{
+ ULONG Length;
+ SIZE_T SegmentReserve;
+ SIZE_T SegmentCommit;
+ SIZE_T DeCommitFreeBlockThreshold;
+ SIZE_T DeCommitTotalFreeThreshold;
+ SIZE_T MaximumAllocationSize;
+ SIZE_T VirtualMemoryThreshold;
+ SIZE_T InitialCommit;
+ SIZE_T InitialReserve;
+ PRTL_HEAP_COMMIT_ROUTINE CommitRoutine;
+ SIZE_T Reserved[2];
+} RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS;
+
typedef void *FAST_MUTEX;
typedef void *PHANDLE_TABLE;
_____
Modified: trunk/reactos/lib/kernel32/process/create.c
--- trunk/reactos/lib/kernel32/process/create.c 2005-08-10 22:15:12 UTC
(rev 17271)
+++ trunk/reactos/lib/kernel32/process/create.c 2005-08-11 00:01:17 UTC
(rev 17272)
@@ -263,7 +263,7 @@
}
else
{
- ReturnClass = 0 /* FIXME */;
+ ReturnClass = PROCESS_PRIORITY_CLASS_INVALID;
}
return ReturnClass;
_____
Modified: trunk/reactos/lib/ntdll/csr/lpc.c
--- trunk/reactos/lib/ntdll/csr/lpc.c 2005-08-10 22:15:12 UTC (rev
17271)
+++ trunk/reactos/lib/ntdll/csr/lpc.c 2005-08-11 00:01:17 UTC (rev
17272)
@@ -107,7 +107,7 @@
PVOID Unknown,
PVOID Context,
ULONG ContextLength,
- PULONG Unknown2)
+ PBOOLEAN ServerToServerCall)
{
NTSTATUS Status;
UNICODE_STRING PortName =
RTL_CONSTANT_STRING(L"\\Windows\\ApiPort");
_____
Modified: trunk/reactos/ntoskrnl/include/internal/io.h
--- trunk/reactos/ntoskrnl/include/internal/io.h 2005-08-10
22:15:12 UTC (rev 17271)
+++ trunk/reactos/ntoskrnl/include/internal/io.h 2005-08-11
00:01:17 UTC (rev 17272)
@@ -23,6 +23,15 @@
IO_STATUS_BLOCK IoStatus;
} IO_COMPLETION_PACKET, *PIO_COMPLETION_PACKET;
+/* List of Bus Type GUIDs */
+typedef struct _IO_BUS_TYPE_GUID_LIST
+{
+ ULONG GuidCount;
+ FAST_MUTEX Lock;
+ GUID Guids[1];
+} IO_BUS_TYPE_GUID_LIST, *PIO_BUS_TYPE_GUID_LIST;
+extern PIO_BUS_TYPE_GUID_LIST IopBusTypeGuidList;
+
/* Packet Types */
#define IrpCompletionPacket 0x1
#define IrpMiniCompletionPacket 0x2
_____
Modified: trunk/reactos/ntoskrnl/io/pnpmgr.c
--- trunk/reactos/ntoskrnl/io/pnpmgr.c 2005-08-10 22:15:12 UTC (rev
17271)
+++ trunk/reactos/ntoskrnl/io/pnpmgr.c 2005-08-11 00:01:17 UTC (rev
17272)
@@ -22,6 +22,7 @@
/* DATA
**********************************************************************/
PDRIVER_OBJECT IopRootDriverObject;
+PIO_BUS_TYPE_GUID_LIST IopBusTypeGuidList = NULL;
/* FUNCTIONS
*****************************************************************/
@@ -32,6 +33,32 @@
return DeviceObject->DeviceObjectExtension->DeviceNode;
}
+NTSTATUS
+STDCALL
+IopQueryDeviceCapabilities(PDEVICE_NODE DeviceNode,
+ PDEVICE_CAPABILITIES DeviceCaps)
+{
+ IO_STATUS_BLOCK StatusBlock;
+ IO_STACK_LOCATION Stack;
+
+ /* Set up the Header */
+ RtlZeroMemory(DeviceCaps, sizeof(DEVICE_CAPABILITIES));
+ DeviceCaps->Size = sizeof(DEVICE_CAPABILITIES);
+ DeviceCaps->Version = 1;
+ DeviceCaps->Address = -1;
+ DeviceCaps->UINumber = -1;
+
+ /* Set up the Stack */
+ RtlZeroMemory(&Stack, sizeof(IO_STACK_LOCATION));
+ Stack.Parameters.DeviceCapabilities.Capabilities = DeviceCaps;
+
+ /* Send the IRP */
+ return IopInitiatePnpIrp(DeviceNode->PhysicalDeviceObject,
+ &StatusBlock,
+ IRP_MN_QUERY_CAPABILITIES,
+ &Stack);
+}
+
/*
* @implemented
*/
@@ -57,9 +84,11 @@
OUT PULONG ResultLength)
{
PDEVICE_NODE DeviceNode = IopGetDeviceNode(DeviceObject);
+ DEVICE_CAPABILITIES DeviceCaps;
ULONG Length;
PVOID Data = NULL;
PWSTR Ptr;
+ NTSTATUS Status;
DPRINT("IoGetDeviceProperty(0x%p %d)\n", DeviceObject,
DeviceProperty);
@@ -75,34 +104,61 @@
/* Complete, untested */
case DevicePropertyBusTypeGuid:
- *ResultLength = 39 * sizeof(WCHAR);
- if (BufferLength < (39 * sizeof(WCHAR)))
- return STATUS_BUFFER_TOO_SMALL;
- swprintf((PWSTR)PropertyBuffer,
- L"{%08lX-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
- DeviceNode->BusTypeGuid.Data1,
- DeviceNode->BusTypeGuid.Data2,
- DeviceNode->BusTypeGuid.Data3,
- DeviceNode->BusTypeGuid.Data4[0],
- DeviceNode->BusTypeGuid.Data4[1],
- DeviceNode->BusTypeGuid.Data4[2],
- DeviceNode->BusTypeGuid.Data4[3],
- DeviceNode->BusTypeGuid.Data4[4],
- DeviceNode->BusTypeGuid.Data4[5],
- DeviceNode->BusTypeGuid.Data4[6],
- DeviceNode->BusTypeGuid.Data4[7]);
- return STATUS_SUCCESS;
+ /* Sanity check */
+ if ((DeviceNode->ChildBusTypeIndex != 0xFFFF) &&
+ (DeviceNode->ChildBusTypeIndex <
IopBusTypeGuidList->GuidCount))
+ {
+ /* Return the GUID */
+ *ResultLength = sizeof(GUID);
+ /* Check if the buffer given was large enough */
+ if (BufferLength < *ResultLength)
+ {
+ return STATUS_BUFFER_TOO_SMALL;
+ }
+
+ /* Copy the GUID */
+ RtlCopyMemory(PropertyBuffer,
+
&(IopBusTypeGuidList->Guids[DeviceNode->ChildBusTypeIndex]),
+ sizeof(GUID));
+ return STATUS_SUCCESS;
+ }
+ else
+ {
+ return STATUS_OBJECT_NAME_NOT_FOUND;
+ }
+ break;
+
case DevicePropertyLegacyBusType:
Length = sizeof(INTERFACE_TYPE);
Data = &DeviceNode->ChildInterfaceType;
break;
case DevicePropertyAddress:
- Length = sizeof(ULONG);
- Data = &DeviceNode->Address;
- break;
+ /* Query the device caps */
+ Status = IopQueryDeviceCapabilities(DeviceNode, &DeviceCaps);
+ if (NT_SUCCESS(Status) && (DeviceCaps.Address != -1))
+ {
+ /* Return length */
+ *ResultLength = sizeof(ULONG);
+
+ /* Check if the buffer given was large enough */
+ if (BufferLength < *ResultLength)
+ {
+ return STATUS_BUFFER_TOO_SMALL;
+ }
+
+ /* Return address */
+ *(PULONG)PropertyBuffer = DeviceCaps.Address;
+ return STATUS_SUCCESS;
+ }
+ else
+ {
+ return STATUS_OBJECT_NAME_NOT_FOUND;
+ }
+ break;
+
// case DevicePropertyUINumber:
// if (DeviceNode->CapabilityFlags == NULL)
// return STATUS_INVALID_DEVICE_REQUEST;
@@ -453,6 +509,66 @@
return STATUS_UNSUCCESSFUL;
}
+USHORT
+STDCALL
+IopGetBusTypeGuidIndex(LPGUID BusTypeGuid)
+{
+ USHORT i = 0, FoundIndex = 0xFFFF;
+ ULONG NewSize;
+ PVOID NewList;
+
+ /* Acquire the lock */
+ ExAcquireFastMutex(&IopBusTypeGuidList->Lock);
+
+ /* Loop all entries */
+ while (i < IopBusTypeGuidList->GuidCount)
+ {
+ /* Try to find a match */
+ if (RtlCompareMemory(BusTypeGuid,
+ &IopBusTypeGuidList->Guids[i],
+ sizeof(GUID)))
+ {
+ /* Found it */
+ FoundIndex = i;
+ goto Quickie;
+ }
+ }
+
+ /* Check if we have to grow the list */
+ if (IopBusTypeGuidList->GuidCount)
+ {
+ /* Calculate the new size */
+ NewSize = sizeof(IO_BUS_TYPE_GUID_LIST) +
+ (sizeof(GUID) * IopBusTypeGuidList->GuidCount);
+
+ /* Allocate the new copy */
+ NewList = ExAllocatePool(PagedPool, NewSize);
+
+ /* Now copy them, decrease the size too */
+ NewSize -= sizeof(GUID);
+ RtlCopyMemory(NewList, IopBusTypeGuidList, NewSize);
+
+ /* Free the old list */
+ ExFreePool(IopBusTypeGuidList);
+
+ /* Use the new buffer */
+ IopBusTypeGuidList = NewList;
+ }
+
+ /* Copy the new GUID */
+
RtlCopyMemory(&IopBusTypeGuidList->Guids[IopBusTypeGuidList->GuidCount],
+ BusTypeGuid,
+ sizeof(GUID));
+
+ /* The new entry is the index */
+ FoundIndex = IopBusTypeGuidList->GuidCount;
+ IopBusTypeGuidList->GuidCount++;
+
+Quickie:
+ ExReleaseFastMutex(&IopBusTypeGuidList->Lock);
+ return FoundIndex;
+}
+
/*
* DESCRIPTION
* Creates a device node
@@ -1212,28 +1328,13 @@
DPRINT("IopInitiatePnpIrp() failed (Status %x)\n", Status);
}
- RtlZeroMemory(&DeviceCapabilities, sizeof(DEVICE_CAPABILITIES));
- DeviceCapabilities.Size = sizeof(DEVICE_CAPABILITIES);
- DeviceCapabilities.Version = 1;
- DeviceCapabilities.Address = -1;
- DeviceCapabilities.UINumber = -1;
-
- Stack.Parameters.DeviceCapabilities.Capabilities =
&DeviceCapabilities;
- Status = IopInitiatePnpIrp(
- DeviceNode->PhysicalDeviceObject,
- &IoStatusBlock,
- IRP_MN_QUERY_CAPABILITIES,
- &Stack);
+ Status = IopQueryDeviceCapabilities(DeviceNode,
&DeviceCapabilities);
if (NT_SUCCESS(Status))
{
- }
- else
- {
DPRINT("IopInitiatePnpIrp() failed (Status %x)\n", Status);
}
DeviceNode->CapabilityFlags =
*(PULONG)((ULONG_PTR)&DeviceCapabilities + 4);
- DeviceNode->Address = DeviceCapabilities.Address;
if (!DeviceCapabilities.UniqueID)
{
@@ -1457,20 +1558,16 @@
DeviceNode->ChildBusNumber = BusInformation->BusNumber;
DeviceNode->ChildInterfaceType = BusInformation->LegacyBusType;
- memcpy(&DeviceNode->BusTypeGuid,
- &BusInformation->BusTypeGuid,
- sizeof(GUID));
+ DeviceNode->ChildBusTypeIndex =
IopGetBusTypeGuidIndex(&BusInformation->BusTypeGuid);
ExFreePool(BusInformation);
}
else
{
DPRINT("IopInitiatePnpIrp() failed (Status %x)\n", Status);
- DeviceNode->ChildBusNumber = -1;
- DeviceNode->ChildInterfaceType = -1;
- memset(&DeviceNode->BusTypeGuid,
- 0,
- sizeof(GUID));
+ DeviceNode->ChildBusNumber = 0xFFFFFFF0;
+ DeviceNode->ChildInterfaceType = InterfaceTypeUndefined;
+ DeviceNode->ChildBusTypeIndex = -1;
}
DPRINT("Sending IRP_MN_QUERY_RESOURCES to device stack\n");
@@ -2026,6 +2123,11 @@
KeInitializeSpinLock(&IopDeviceTreeLock);
+ /* Initialize the Bus Type GUID List */
+ IopBusTypeGuidList = ExAllocatePool(PagedPool,
sizeof(IO_BUS_TYPE_GUID_LIST));
+ RtlZeroMemory(IopBusTypeGuidList, sizeof(IO_BUS_TYPE_GUID_LIST));
+ ExInitializeFastMutex(&IopBusTypeGuidList->Lock);
+
/* Initialize PnP-Event notification support */
Status = IopInitPlugPlayEvents();
if (!NT_SUCCESS(Status))
_____
Modified: trunk/reactos/w32api/include/ddk/ntifs.h
--- trunk/reactos/w32api/include/ddk/ntifs.h 2005-08-10 22:15:12 UTC
(rev 17271)
+++ trunk/reactos/w32api/include/ddk/ntifs.h 2005-08-11 00:01:17 UTC
(rev 17272)
@@ -627,6 +627,31 @@
} DUMMYUNIONNAME;
} EX_RUNDOWN_REF, *PEX_RUNDOWN_REF;
+#define EX_PUSH_LOCK_LOCK_V ((ULONG_PTR)0x0)
+#define EX_PUSH_LOCK_LOCK ((ULONG_PTR)0x1)
+#define EX_PUSH_LOCK_WAITING ((ULONG_PTR)0x2)
+#define EX_PUSH_LOCK_WAKING ((ULONG_PTR)0x4)
+#define EX_PUSH_LOCK_MULTIPLE_SHARED ((ULONG_PTR)0x8)
+#define EX_PUSH_LOCK_SHARE_INC ((ULONG_PTR)0x10)
+#define EX_PUSH_LOCK_PTR_BITS ((ULONG_PTR)0xf)
+
+typedef struct _EX_PUSH_LOCK
+{
+ union
+ {
+ struct
+ {
+ ULONG_PTR Locked:1;
+ ULONG_PTR Waiting:1;
+ ULONG_PTR Waking:1;
+ ULONG_PTR MultipleShared:1;
+ ULONG_PTR Shared:sizeof (ULONG_PTR) * 8 - 4;
+ };
+ ULONG_PTR Value;
+ PVOID Ptr;
+ };
+} EX_PUSH_LOCK, *PEX_PUSH_LOCK;
+
typedef struct _FILE_ACCESS_INFORMATION {
ACCESS_MASK AccessFlags;
} FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;