[ros-diffs] [pschweitzer] 40761: - Added a macro to check whether a PDO is valid (for PNP manager) - Started implementing IoReportTargetDeviceChange() using that macro and checking basic stuff. That's kind of test.
pschweitzer at svn.reactos.org
pschweitzer at svn.reactos.org
Fri May 1 15:24:06 CEST 2009
Author: pschweitzer
Date: Fri May 1 17:24:05 2009
New Revision: 40761
URL: http://svn.reactos.org/svn/reactos?rev=40761&view=rev
Log:
- Added a macro to check whether a PDO is valid (for PNP manager)
- Started implementing IoReportTargetDeviceChange() using that macro and checking basic stuff.
That's kind of test.
Modified:
branches/pierre-fsd/ntoskrnl/include/internal/io.h
branches/pierre-fsd/ntoskrnl/io/pnpmgr/pnpreport.c
Modified: branches/pierre-fsd/ntoskrnl/include/internal/io.h
URL: http://svn.reactos.org/svn/reactos/branches/pierre-fsd/ntoskrnl/include/internal/io.h?rev=40761&r1=40760&r2=40761&view=diff
==============================================================================
--- branches/pierre-fsd/ntoskrnl/include/internal/io.h [iso-8859-1] (original)
+++ branches/pierre-fsd/ntoskrnl/include/internal/io.h [iso-8859-1] Fri May 1 17:24:05 2009
@@ -204,6 +204,16 @@
(_DeviceNode); \
(_DeviceTreeTraverseContext)->Action = (_Action); \
(_DeviceTreeTraverseContext)->Context = (_Context); }
+
+/*
+ * B00LEAN
+ * IopIsValidPhysicalDeviceObject(
+ * IN PDEVICE_OBJECT PhysicalDeviceObject);
+ */
+#define IopIsValidPhysicalDeviceObject(PhysicalDeviceObject) \
+ (((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject) && \
+ (((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode) && \
+ (((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode->Flags & DNF_ENUMERATED))
//
// Device List Operations
@@ -450,6 +460,12 @@
PVOID Context;
} DEVICETREE_TRAVERSE_CONTEXT, *PDEVICETREE_TRAVERSE_CONTEXT;
+typedef struct _INT_FILE_OBJECT_FILTER_CONTEXT
+{
+ FAST_MUTEX FastMutex;
+ LIST_ENTRY FilterContexts;
+} INT_FILE_OBJECT_FILTER_CONTEXT, * PINT_FILE_OBJECT_FILTER_CONTEXT;
+
//
// PNP Routines
//
@@ -968,6 +984,23 @@
IN ULONG SystemHandleCount
);
+/* FIXME: Should be moved to NDK */
+#if 1
+BOOLEAN
+NTAPI
+IoChangeFileObjectFilterContext(
+ IN PFILE_OBJECT FileObject,
+ IN PINT_FILE_OBJECT_FILTER_CONTEXT FilterContext,
+ IN ULONG Unknown
+);
+
+PINT_FILE_OBJECT_FILTER_CONTEXT
+NTAPI
+IoGetFileObjectFilterContext(
+ IN PFILE_OBJECT FileObject
+);
+#endif
+
//
// I/O Timer Routines
//
Modified: branches/pierre-fsd/ntoskrnl/io/pnpmgr/pnpreport.c
URL: http://svn.reactos.org/svn/reactos/branches/pierre-fsd/ntoskrnl/io/pnpmgr/pnpreport.c?rev=40761&r1=40760&r2=40761&view=diff
==============================================================================
--- branches/pierre-fsd/ntoskrnl/io/pnpmgr/pnpreport.c [iso-8859-1] (original)
+++ branches/pierre-fsd/ntoskrnl/io/pnpmgr/pnpreport.c [iso-8859-1] Fri May 1 17:24:05 2009
@@ -106,6 +106,23 @@
IN PDEVICE_OBJECT PhysicalDeviceObject,
IN PVOID NotificationStructure)
{
+ PTARGET_DEVICE_CUSTOM_NOTIFICATION IntNotificationStructure;
+
+ ASSERT(NotificationStructure);
+
+ if (!IopIsValidPhysicalDeviceObject(PhysicalDeviceObject))
+ {
+ KeBugCheckEx(PNP_DETECTED_FATAL_ERROR, 0x2, (ULONG)PhysicalDeviceObject, 0, 0);
+ }
+
+ IntNotificationStructure = (PTARGET_DEVICE_CUSTOM_NOTIFICATION)NotificationStructure;
+ if (RtlCompareMemory(&(IntNotificationStructure->Event), &(GUID_TARGET_DEVICE_QUERY_REMOVE), sizeof(GUID)) ||
+ RtlCompareMemory(&(IntNotificationStructure->Event), &(GUID_TARGET_DEVICE_REMOVE_CANCELLED), sizeof(GUID)) ||
+ RtlCompareMemory(&(IntNotificationStructure->Event), &(GUID_TARGET_DEVICE_REMOVE_COMPLETE), sizeof(GUID)))
+ {
+ return STATUS_INVALID_DEVICE_REQUEST;
+ }
+
DPRINT1("IoReportTargetDeviceChange called (UNIMPLEMENTED)\n");
return STATUS_NOT_IMPLEMENTED;
}
More information about the Ros-diffs
mailing list