00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
#ifndef _PNP_
00027
#define _PNP_
00028
00029
00030
00031
00032
00033
00034
00035
00036 extern ERESOURCE PpRegistryDeviceResource;
00037 extern PDRIVER_OBJECT IoPnpDriverObject;
00038
00039
00040
00041
00042
00043
00044
00045 typedef enum {
00046
DevicePropertyDeviceDescription,
00047
DevicePropertyHardwareID,
00048
DevicePropertyCompatibleIDs,
00049
DevicePropertyBootConfiguration,
00050
DevicePropertyBootConfigurationTranslated,
00051
DevicePropertyClassName,
00052
DevicePropertyClassGuid,
00053
DevicePropertyDriverKeyName,
00054
DevicePropertyManufacturer,
00055
DevicePropertyFriendlyName,
00056
DevicePropertyLocationInformation,
00057
DevicePropertyPhysicalDeviceObjectName,
00058
DevicePropertyBusTypeGuid,
00059
DevicePropertyLegacyBusType,
00060
DevicePropertyBusNumber,
00061
DevicePropertyEnumeratorName,
00062
DevicePropertyAddress,
00063
DevicePropertyUINumber
00064 }
DEVICE_REGISTRY_PROPERTY;
00065
00066 typedef BOOLEAN (*
PTRANSLATE_BUS_ADDRESS)(
00067 IN PVOID Context,
00068 IN PHYSICAL_ADDRESS BusAddress,
00069 IN ULONG Length,
00070 IN OUT PULONG AddressSpace,
00071 OUT PPHYSICAL_ADDRESS TranslatedAddress
00072 );
00073
00074 typedef struct _DMA_ADAPTER *(*PGET_DMA_ADAPTER)(
00075 IN PVOID Context,
00076 IN
struct _DEVICE_DESCRIPTION *DeviceDescriptor,
00077 OUT PULONG NumberOfMapRegisters
00078 );
00079
00080 typedef ULONG (*PGET_SET_DEVICE_DATA)(
00081 IN PVOID Context,
00082 IN ULONG DataType,
00083 IN PVOID
Buffer,
00084 IN ULONG
Offset,
00085 IN ULONG Length
00086 );
00087
00088
00089
00090
00091
00092
00093 typedef struct _PNP_BUS_INFORMATION {
00094 GUID
BusTypeGuid;
00095 INTERFACE_TYPE
LegacyBusType;
00096 ULONG
BusNumber;
00097 }
PNP_BUS_INFORMATION, *
PPNP_BUS_INFORMATION;
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107 typedef struct _LEGACY_BUS_INFORMATION {
00108 GUID
BusTypeGuid;
00109 INTERFACE_TYPE
LegacyBusType;
00110 ULONG
BusNumber;
00111 }
LEGACY_BUS_INFORMATION, *
PLEGACY_BUS_INFORMATION;
00112
00113 typedef struct _BUS_INTERFACE_STANDARD {
00114
00115
00116
00117 USHORT Size;
00118 USHORT Version;
00119 PVOID Context;
00120 PINTERFACE_REFERENCE
InterfaceReference;
00121 PINTERFACE_DEREFERENCE
InterfaceDereference;
00122
00123
00124
00125 PTRANSLATE_BUS_ADDRESS TranslateBusAddress;
00126 PGET_DMA_ADAPTER GetDmaAdapter;
00127 PGET_SET_DEVICE_DATA SetBusData;
00128 PGET_SET_DEVICE_DATA GetBusData;
00129
00130 }
BUS_INTERFACE_STANDARD, *
PBUS_INTERFACE_STANDARD;
00131
00132
00133
00134
00135 typedef BOOLEAN (*
PGPE_SERVICE_ROUTINE) (
00136 PVOID,
00137 PVOID);
00138
00139 typedef NTSTATUS (*
PGPE_CONNECT_VECTOR) (
00140
PDEVICE_OBJECT,
00141 ULONG,
00142
KINTERRUPT_MODE,
00143 BOOLEAN,
00144
PGPE_SERVICE_ROUTINE,
00145 PVOID,
00146 PVOID);
00147
00148 typedef NTSTATUS (*
PGPE_DISCONNECT_VECTOR) (
00149 PVOID);
00150
00151 typedef NTSTATUS (*
PGPE_ENABLE_EVENT) (
00152
PDEVICE_OBJECT,
00153 PVOID);
00154
00155 typedef NTSTATUS (*
PGPE_DISABLE_EVENT) (
00156
PDEVICE_OBJECT,
00157 PVOID);
00158
00159 typedef NTSTATUS (*
PGPE_CLEAR_STATUS) (
00160
PDEVICE_OBJECT,
00161 PVOID);
00162
00163 typedef VOID (*
PDEVICE_NOTIFY_CALLBACK) (
00164 PVOID,
00165 ULONG);
00166
00167 typedef NTSTATUS (*
PREGISTER_FOR_DEVICE_NOTIFICATIONS) (
00168
PDEVICE_OBJECT,
00169
PDEVICE_NOTIFY_CALLBACK,
00170 PVOID);
00171
00172 typedef void (*
PUNREGISTER_FOR_DEVICE_NOTIFICATIONS) (
00173
PDEVICE_OBJECT,
00174
PDEVICE_NOTIFY_CALLBACK);
00175
00176 typedef struct _ACPI_INTERFACE_STANDARD {
00177
00178
00179
00180 USHORT Size;
00181 USHORT Version;
00182 PVOID Context;
00183 PINTERFACE_REFERENCE
InterfaceReference;
00184 PINTERFACE_DEREFERENCE
InterfaceDereference;
00185
00186
00187
00188 PGPE_CONNECT_VECTOR GpeConnectVector;
00189 PGPE_DISCONNECT_VECTOR GpeDisconnectVector;
00190 PGPE_ENABLE_EVENT GpeEnableEvent;
00191 PGPE_DISABLE_EVENT GpeDisableEvent;
00192 PGPE_CLEAR_STATUS GpeClearStatus;
00193 PREGISTER_FOR_DEVICE_NOTIFICATIONS RegisterForDeviceNotifications;
00194 PUNREGISTER_FOR_DEVICE_NOTIFICATIONS UnregisterForDeviceNotifications;
00195
00196 }
ACPI_INTERFACE_STANDARD, *
PACPI_INTERFACE_STANDARD;
00197
00198
00199
00200 typedef enum _ACPI_REG_TYPE {
00201
PM1a_ENABLE,
00202
PM1b_ENABLE,
00203
PM1a_STATUS,
00204
PM1b_STATUS,
00205
PM1a_CONTROL,
00206
PM1b_CONTROL,
00207
GP_STATUS,
00208
GP_ENABLE,
00209
SMI_CMD,
00210
MaxRegType
00211 }
ACPI_REG_TYPE, *
PACPI_REG_TYPE;
00212
00213 typedef USHORT (*
PREAD_ACPI_REGISTER) (
00214 IN
ACPI_REG_TYPE AcpiReg,
00215 IN ULONG Register);
00216
00217 typedef VOID (*
PWRITE_ACPI_REGISTER) (
00218 IN
ACPI_REG_TYPE AcpiReg,
00219 IN ULONG Register,
00220 IN
USHORT Value
00221 );
00222
00223 typedef struct ACPI_REGS_INTERFACE_STANDARD {
00224
00225
00226
00227 USHORT Size;
00228 USHORT Version;
00229 PVOID Context;
00230 PINTERFACE_REFERENCE
InterfaceReference;
00231 PINTERFACE_DEREFERENCE
InterfaceDereference;
00232
00233
00234
00235
00236 PREAD_ACPI_REGISTER ReadAcpiRegister;
00237 PWRITE_ACPI_REGISTER WriteAcpiRegister;
00238
00239 }
ACPI_REGS_INTERFACE_STANDARD, *
PACPI_REGS_INTERFACE_STANDARD;
00240
00241
00242
00243
00244
00245 typedef struct {
00246 PVOID LinkNode;
00247 ULONG StaticVector;
00248 UCHAR Flags;
00249 }
ROUTING_TOKEN, *
PROUTING_TOKEN;
00250
00251
00252
00253
00254
00255
00256
00257 #define PCI_MSI_ROUTING 0x1
00258
00259
typedef
00260
NTSTATUS
00261 (*PGET_INTERRUPT_ROUTING)(
00262 IN
PDEVICE_OBJECT Pdo,
00263 OUT ULONG *Bus,
00264 OUT ULONG *PciSlot,
00265 OUT UCHAR *InterruptLine,
00266 OUT UCHAR *InterruptPin,
00267 OUT UCHAR *ClassCode,
00268 OUT UCHAR *SubClassCode,
00269 OUT
PDEVICE_OBJECT *ParentPdo,
00270 OUT
ROUTING_TOKEN *RoutingToken,
00271 OUT UCHAR *Flags
00272 );
00273
00274
typedef
00275
NTSTATUS
00276 (*PSET_INTERRUPT_ROUTING_TOKEN)(
00277 IN
PDEVICE_OBJECT Pdo,
00278 IN
PROUTING_TOKEN RoutingToken
00279 );
00280
00281
typedef
00282
VOID
00283 (*PUPDATE_INTERRUPT_LINE)(
00284 IN
PDEVICE_OBJECT Pdo,
00285 IN UCHAR LineRegister
00286 );
00287
00288 typedef struct _INT_ROUTE_INTERFACE_STANDARD {
00289
00290
00291
00292 USHORT Size;
00293 USHORT Version;
00294 PVOID Context;
00295 PINTERFACE_REFERENCE
InterfaceReference;
00296 PINTERFACE_DEREFERENCE
InterfaceDereference;
00297
00298
00299
00300 PGET_INTERRUPT_ROUTING GetInterruptRouting;
00301 PSET_INTERRUPT_ROUTING_TOKEN SetInterruptRoutingToken;
00302 PUPDATE_INTERRUPT_LINE UpdateInterruptLine;
00303
00304 }
INT_ROUTE_INTERFACE_STANDARD, *
PINT_ROUTE_INTERFACE_STANDARD;
00305
00306
00307
00308 #define PCI_INT_ROUTE_INTRF_STANDARD_VER 1
00309
00310
00311
00312
NTKERNELAPI
00313 BOOLEAN
00314
PpInitSystem (
00315 VOID
00316 );
00317
00318
NTKERNELAPI
00319
NTSTATUS
00320
PpDeviceRegistration(
00321 IN PUNICODE_STRING DeviceInstancePath,
00322 IN BOOLEAN Add,
00323 IN PUNICODE_STRING ServiceKeyName OPTIONAL
00324 );
00325
00326
NTKERNELAPI
00327
NTSTATUS
00328
IoSynchronousInvalidateDeviceRelations(
00329
PDEVICE_OBJECT DeviceObject,
00330 DEVICE_RELATION_TYPE Type
00331 );
00332
00333
00334
00335 typedef struct _IO_ASSIGNED_RESOURCES {
00336 ULONG
Count;
00337 PASSIGNED_RESOURCE
AssignedResources[1];
00338 }
IO_ASSIGNED_RESOURCES, *
PIO_ASSIGNED_RESOURCES;
00339
00340
NTKERNELAPI
00341
NTSTATUS
00342
IoGetAssignedResourcesForSuballocation (
00343 IN INTERFACE_TYPE InterfaceType,
00344 IN ULONG BusNumber,
00345 IN ULONG SlotNumber,
00346 IN PIO_RESOURCE_DESCRIPTOR ResourceDescriptor,
00347 OUT PIO_ASSIGNED_RESOURCES *List
00348 );
00349
00350
NTKERNELAPI
00351
NTSTATUS
00352
IoReportDetectedDevice(
00353 IN
PDRIVER_OBJECT DriverObject,
00354 IN INTERFACE_TYPE LegacyBusType,
00355 IN ULONG BusNumber,
00356 IN ULONG SlotNumber,
00357 IN PCM_RESOURCE_LIST ResourceList,
00358 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL,
00359 IN BOOLEAN ResourceAssigned,
00360 IN OUT
PDEVICE_OBJECT *DeviceObject
00361 );
00362
00363
00364
00365
NTKERNELAPI
00366
VOID
00367
IoInvalidateDeviceRelations(
00368 IN
PDEVICE_OBJECT DeviceObject,
00369 IN DEVICE_RELATION_TYPE Type
00370 );
00371
00372
NTKERNELAPI
00373
VOID
00374
IoRequestDeviceEject(
00375 IN
PDEVICE_OBJECT PhysicalDeviceObject
00376 );
00377
00378
NTKERNELAPI
00379
NTSTATUS
00380
IoGetDeviceProperty(
00381 IN
PDEVICE_OBJECT DeviceObject,
00382 IN DEVICE_REGISTRY_PROPERTY DeviceProperty,
00383 IN ULONG BufferLength,
00384 OUT PVOID PropertyBuffer,
00385 OUT PULONG ResultLength
00386 );
00387
00388
00389
00390
00391
00392 #define PLUGPLAY_REGKEY_DEVICE 1
00393 #define PLUGPLAY_REGKEY_DRIVER 2
00394 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4
00395
00396
NTKERNELAPI
00397
NTSTATUS
00398
IoOpenDeviceRegistryKey(
00399 IN
PDEVICE_OBJECT DeviceObject,
00400 IN ULONG DevInstKeyType,
00401 IN ACCESS_MASK DesiredAccess,
00402 OUT PHANDLE DevInstRegKey
00403 );
00404
00405
NTKERNELAPI
00406
NTSTATUS
00407 NTAPI
00408
IoRegisterDeviceInterface(
00409 IN
PDEVICE_OBJECT PhysicalDeviceObject,
00410 IN CONST GUID *InterfaceClassGuid,
00411 IN PUNICODE_STRING ReferenceString, OPTIONAL
00412 OUT PUNICODE_STRING SymbolicLinkName
00413 );
00414
00415
NTKERNELAPI
00416
NTSTATUS
00417
IoOpenDeviceInterfaceRegistryKey(
00418 IN PUNICODE_STRING SymbolicLinkName,
00419 IN ACCESS_MASK DesiredAccess,
00420 OUT PHANDLE DeviceInterfaceKey
00421 );
00422
00423
00424
00425
NTKERNELAPI
00426
NTSTATUS
00427
IoSetDeviceInterfaceState(
00428 IN PUNICODE_STRING SymbolicLinkName,
00429 IN BOOLEAN Enable
00430 );
00431
00432
00433
00434
NTKERNELAPI
00435
NTSTATUS
00436 NTAPI
00437
IoGetDeviceInterfaces(
00438 IN CONST GUID *InterfaceClassGuid,
00439 IN
PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL,
00440 IN ULONG Flags,
00441 OUT PWSTR *SymbolicLinkList
00442 );
00443
00444 #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001
00445
00446
NTKERNELAPI
00447
NTSTATUS
00448 NTAPI
00449
IoGetDeviceInterfaceAlias(
00450 IN PUNICODE_STRING SymbolicLinkName,
00451 IN CONST GUID *AliasInterfaceClassGuid,
00452 OUT PUNICODE_STRING AliasSymbolicLinkName
00453 );
00454
00455
00456
00457
00458
00459 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY {
00460
EventCategoryReserved,
00461
EventCategoryHardwareProfileChange,
00462
EventCategoryDeviceInterfaceChange,
00463
EventCategoryTargetDeviceChange
00464 }
IO_NOTIFICATION_EVENT_CATEGORY;
00465
00466
00467
00468
00469
00470
00471 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
00472
00473
typedef
00474
NTSTATUS
00475 (*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE) (
00476 IN PVOID NotificationStructure,
00477 IN PVOID Context
00478 );
00479
00480
00481
NTKERNELAPI
00482
NTSTATUS
00483
IoRegisterPlugPlayNotification(
00484 IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory,
00485 IN ULONG EventCategoryFlags,
00486 IN PVOID EventCategoryData OPTIONAL,
00487 IN
PDRIVER_OBJECT DriverObject,
00488 IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine,
00489 IN PVOID Context,
00490 OUT PVOID *NotificationEntry
00491 );
00492
00493
NTKERNELAPI
00494
NTSTATUS
00495
IoUnregisterPlugPlayNotification(
00496 IN PVOID NotificationEntry
00497 );
00498
00499
NTKERNELAPI
00500
NTSTATUS
00501
IoReportTargetDeviceChange(
00502 IN
PDEVICE_OBJECT PhysicalDeviceObject,
00503 IN PVOID NotificationStructure
00504 );
00505
00506
typedef
00507
VOID
00508 (*PDEVICE_CHANGE_COMPLETE_CALLBACK)(
00509 IN PVOID Context
00510 );
00511
00512
NTKERNELAPI
00513
VOID
00514
IoInvalidateDeviceState(
00515 IN
PDEVICE_OBJECT PhysicalDeviceObject
00516 );
00517
00518 #define IoAdjustPagingPathCount(_count_,_paging_) { \
00519
if (_paging_) { \
00520
InterlockedIncrement(_count_); \
00521
} else { \
00522
InterlockedDecrement(_count_); \
00523
} \
00524
}
00525
00526
00527
00528
NTKERNELAPI
00529
NTSTATUS
00530
IoReportTargetDeviceChangeAsynchronous(
00531 IN
PDEVICE_OBJECT PhysicalDeviceObject,
00532 IN PVOID NotificationStructure,
00533 IN
PDEVICE_CHANGE_COMPLETE_CALLBACK Callback, OPTIONAL
00534 IN PVOID Context OPTIONAL
00535 );
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545
00546 typedef enum _ARBITER_ACTION {
00547
ArbiterActionTestAllocation,
00548
ArbiterActionRetestAllocation,
00549
ArbiterActionCommitAllocation,
00550
ArbiterActionRollbackAllocation,
00551
ArbiterActionQueryAllocatedResources,
00552
ArbiterActionWriteReservedResources,
00553
ArbiterActionQueryConflict,
00554
ArbiterActionQueryArbitrate,
00555
ArbiterActionAddReserved,
00556
ArbiterActionBootAllocation
00557 }
ARBITER_ACTION, *
PARBITER_ACTION;
00558
00559 typedef struct _ARBITER_CONFLICT_INFO {
00560
00561
00562
00563 PDEVICE_OBJECT OwningObject;
00564
00565
00566
00567
00568 ULONGLONG
Start;
00569
00570
00571
00572
00573 ULONGLONG
End;
00574
00575 }
ARBITER_CONFLICT_INFO, *
PARBITER_CONFLICT_INFO;
00576
00577
00578
00579
00580
00581 typedef struct _ARBITER_PARAMETERS {
00582
00583
union {
00584
00585
struct {
00586
00587
00588
00589
00590 IN OUT PLIST_ENTRY
ArbitrationList;
00591
00592
00593
00594
00595 IN ULONG
AllocateFromCount;
00596
00597
00598
00599
00600
00601 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR
AllocateFrom;
00602
00603 }
TestAllocation;
00604
00605
struct {
00606
00607
00608
00609
00610 IN OUT PLIST_ENTRY
ArbitrationList;
00611
00612
00613
00614
00615 IN ULONG
AllocateFromCount;
00616
00617
00618
00619
00620
00621 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR
AllocateFrom;
00622
00623 } RetestAllocation;
00624
00625
struct {
00626
00627
00628
00629
00630 IN OUT PLIST_ENTRY
ArbitrationList;
00631
00632 } BootAllocation;
00633
00634
struct {
00635
00636
00637
00638
00639 OUT PCM_PARTIAL_RESOURCE_LIST *
AllocatedResources;
00640
00641 } QueryAllocatedResources;
00642
00643
struct {
00644
00645
00646
00647
00648 IN
PDEVICE_OBJECT PhysicalDeviceObject;
00649
00650
00651
00652
00653 IN PIO_RESOURCE_DESCRIPTOR
ConflictingResource;
00654
00655
00656
00657
00658 OUT PULONG
ConflictCount;
00659
00660
00661
00662
00663 OUT
PARBITER_CONFLICT_INFO *
Conflicts;
00664
00665 } QueryConflict;
00666
00667
struct {
00668
00669
00670
00671
00672
00673 IN PLIST_ENTRY
ArbitrationList;
00674
00675 } QueryArbitrate;
00676
00677
struct {
00678
00679
00680
00681
00682 PDEVICE_OBJECT ReserveDevice;
00683
00684 } AddReserved;
00685
00686 }
Parameters;
00687
00688 }
ARBITER_PARAMETERS, *
PARBITER_PARAMETERS;
00689
00690
00691
00692 typedef enum _ARBITER_REQUEST_SOURCE {
00693
00694
ArbiterRequestUndefined = -1,
00695
ArbiterRequestLegacyReported,
00696
ArbiterRequestHalReported,
00697
ArbiterRequestLegacyAssigned,
00698
ArbiterRequestPnpDetected,
00699
ArbiterRequestPnpEnumerated
00700
00701 }
ARBITER_REQUEST_SOURCE;
00702
00703
00704 typedef enum _ARBITER_RESULT {
00705
00706
ArbiterResultUndefined = -1,
00707
ArbiterResultSuccess,
00708
ArbiterResultExternalConflict,
00709
ArbiterResultNullRequest
00710
00711 }
ARBITER_RESULT;
00712
00713
00714
00715
00716
00717
00718
00719 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
00720
00721
NTKERNELAPI
00722
NTSTATUS
00723
IoReportResourceForDetection(
00724 IN
PDRIVER_OBJECT DriverObject,
00725 IN PCM_RESOURCE_LIST DriverList OPTIONAL,
00726 IN ULONG DriverListSize OPTIONAL,
00727 IN
PDEVICE_OBJECT DeviceObject OPTIONAL,
00728 IN PCM_RESOURCE_LIST DeviceList OPTIONAL,
00729 IN ULONG DeviceListSize OPTIONAL,
00730 OUT PBOOLEAN ConflictDetected
00731 );
00732
00733
00734 typedef struct _ARBITER_LIST_ENTRY {
00735
00736
00737
00738
00739 LIST_ENTRY
ListEntry;
00740
00741
00742
00743
00744 ULONG
AlternativeCount;
00745
00746
00747
00748
00749 PIO_RESOURCE_DESCRIPTOR
Alternatives;
00750
00751
00752
00753
00754 PDEVICE_OBJECT PhysicalDeviceObject;
00755
00756
00757
00758
00759 ARBITER_REQUEST_SOURCE RequestSource;
00760
00761
00762
00763
00764 ULONG
Flags;
00765
00766
00767
00768
00769
00770 LONG_PTR
WorkSpace;
00771
00772
00773
00774
00775
00776 INTERFACE_TYPE
InterfaceType;
00777 ULONG
SlotNumber;
00778 ULONG
BusNumber;
00779
00780
00781
00782
00783
00784
00785 PCM_PARTIAL_RESOURCE_DESCRIPTOR
Assignment;
00786
00787
00788
00789
00790
00791 PIO_RESOURCE_DESCRIPTOR
SelectedAlternative;
00792
00793
00794
00795
00796
00797 ARBITER_RESULT Result;
00798
00799 }
ARBITER_LIST_ENTRY, *
PARBITER_LIST_ENTRY;
00800
00801
00802
00803
00804
00805
typedef
00806
NTSTATUS
00807 (*PARBITER_HANDLER) (
00808 IN PVOID Context,
00809 IN
ARBITER_ACTION Action,
00810 IN OUT
PARBITER_PARAMETERS Parameters
00811 );
00812
00813
00814
00815
00816
00817
00818
00819
00820
00821
00822
00823 #define ARBITER_PARTIAL 0x00000001
00824
00825
00826 typedef struct _ARBITER_INTERFACE {
00827
00828
00829
00830
00831 USHORT Size;
00832 USHORT Version;
00833 PVOID Context;
00834 PINTERFACE_REFERENCE
InterfaceReference;
00835 PINTERFACE_DEREFERENCE
InterfaceDereference;
00836
00837
00838
00839
00840 PARBITER_HANDLER ArbiterHandler;
00841
00842
00843
00844
00845 ULONG
Flags;
00846
00847 }
ARBITER_INTERFACE, *
PARBITER_INTERFACE;
00848
00849
00850
00851
00852
00853 typedef enum _RESOURCE_TRANSLATION_DIRECTION {
00854
TranslateChildToParent,
00855
TranslateParentToChild
00856 }
RESOURCE_TRANSLATION_DIRECTION;
00857
00858
00859
00860
00861
00862
typedef
00863
NTSTATUS
00864 (*PTRANSLATE_RESOURCE_HANDLER)(
00865 IN PVOID Context,
00866 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source,
00867 IN
RESOURCE_TRANSLATION_DIRECTION Direction,
00868 IN ULONG AlternativesCount, OPTIONAL
00869 IN IO_RESOURCE_DESCRIPTOR Alternatives[], OPTIONAL
00870 IN
PDEVICE_OBJECT PhysicalDeviceObject,
00871 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
00872 );
00873
00874
typedef
00875
NTSTATUS
00876 (*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER)(
00877 IN PVOID Context,
00878 IN PIO_RESOURCE_DESCRIPTOR Source,
00879 IN
PDEVICE_OBJECT PhysicalDeviceObject,
00880 OUT PULONG TargetCount,
00881 OUT PIO_RESOURCE_DESCRIPTOR *Target
00882 );
00883
00884
00885
00886
00887
00888 typedef struct _TRANSLATOR_INTERFACE {
00889 USHORT Size;
00890 USHORT Version;
00891 PVOID Context;
00892 PINTERFACE_REFERENCE
InterfaceReference;
00893 PINTERFACE_DEREFERENCE
InterfaceDereference;
00894 PTRANSLATE_RESOURCE_HANDLER TranslateResources;
00895 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements;
00896 }
TRANSLATOR_INTERFACE, *
PTRANSLATOR_INTERFACE;
00897
00898
00899
00900
00901
00902
00903
00904
typedef
00905
NTSTATUS
00906 (*PLEGACY_DEVICE_DETECTION_HANDLER)(
00907 IN PVOID Context,
00908 IN INTERFACE_TYPE LegacyBusType,
00909 IN ULONG
BusNumber,
00910 IN ULONG SlotNumber,
00911 OUT
PDEVICE_OBJECT *PhysicalDeviceObject
00912 );
00913
00914
00915
00916
00917
00918 typedef struct _LEGACY_DEVICE_DETECTION_INTERFACE {
00919 USHORT Size;
00920 USHORT Version;
00921 PVOID Context;
00922 PINTERFACE_REFERENCE
InterfaceReference;
00923 PINTERFACE_DEREFERENCE
InterfaceDereference;
00924 PLEGACY_DEVICE_DETECTION_HANDLER LegacyDeviceDetection;
00925 }
LEGACY_DEVICE_DETECTION_INTERFACE, *
PLEGACY_DEVICE_DETECTION_INTERFACE;
00926
00927
00928
00929
00930
00931
00932
00933
00934
00935 typedef struct _PLUGPLAY_NOTIFICATION_HEADER {
00936 USHORT Version;
00937 USHORT Size;
00938 GUID
Event;
00939
00940
00941
00942 }
PLUGPLAY_NOTIFICATION_HEADER, *
PPLUGPLAY_NOTIFICATION_HEADER;
00943
00944
00945
00946
00947
00948 typedef struct _HWPROFILE_CHANGE_NOTIFICATION {
00949 USHORT Version;
00950 USHORT Size;
00951 GUID
Event;
00952
00953
00954
00955 }
HWPROFILE_CHANGE_NOTIFICATION, *
PHWPROFILE_CHANGE_NOTIFICATION;
00956
00957
00958
00959
00960
00961
00962 typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION {
00963 USHORT Version;
00964 USHORT Size;
00965 GUID
Event;
00966
00967
00968
00969 GUID
InterfaceClassGuid;
00970 PUNICODE_STRING
SymbolicLinkName;
00971 }
DEVICE_INTERFACE_CHANGE_NOTIFICATION, *
PDEVICE_INTERFACE_CHANGE_NOTIFICATION;
00972
00973
00974
00975
00976
00977
00978
00979
00980
00981
00982 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION {
00983 USHORT Version;
00984 USHORT Size;
00985 GUID
Event;
00986
00987
00988
00989 PFILE_OBJECT FileObject;
00990 }
TARGET_DEVICE_REMOVAL_NOTIFICATION, *
PTARGET_DEVICE_REMOVAL_NOTIFICATION;
00991
00992
00993
00994
00995
00996
00997
00998
00999
01000
01001
01002 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION {
01003 USHORT Version;
01004 USHORT Size;
01005 GUID
Event;
01006
01007
01008
01009 PFILE_OBJECT FileObject;
01010
01011
01012
01013
01014
01015
01016 LONG
NameBufferOffset;
01017
01018
01019 UCHAR
CustomDataBuffer[1];
01020
01021
01022
01023
01024 }
TARGET_DEVICE_CUSTOM_NOTIFICATION, *
PTARGET_DEVICE_CUSTOM_NOTIFICATION;
01025
01026
01027
01028
NTSTATUS
01029
PpSetCustomTargetEvent(
01030 IN
PDEVICE_OBJECT DeviceObject,
01031 IN
PKEVENT SyncEvent OPTIONAL,
01032 OUT PULONG Result OPTIONAL,
01033 IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL,
01034 IN PVOID Context OPTIONAL,
01035 IN PTARGET_DEVICE_CUSTOM_NOTIFICATION NotificationStructure
01036 );
01037
01038
NTSTATUS
01039
PpSetTargetDeviceRemove(
01040 IN
PDEVICE_OBJECT DeviceObject,
01041 IN BOOLEAN KernelInitiated,
01042 IN BOOLEAN NoRestart,
01043 IN BOOLEAN DoEject,
01044 IN ULONG Problem,
01045 IN
PKEVENT SyncEvent OPTIONAL,
01046 OUT PULONG Result OPTIONAL,
01047 OUT PPNP_VETO_TYPE VetoType OPTIONAL,
01048 OUT PUNICODE_STRING VetoName OPTIONAL
01049 );
01050
01051
NTSTATUS
01052
PpSetDeviceRemovalSafe(
01053 IN
PDEVICE_OBJECT DeviceObject,
01054 IN
PKEVENT SyncEvent OPTIONAL,
01055 OUT PULONG Result OPTIONAL
01056 );
01057
01058
NTSTATUS
01059
PpNotifyUserModeRemovalSafe(
01060 IN
PDEVICE_OBJECT DeviceObject
01061 );
01062
01063 #define TDF_DEVICEEJECTABLE 0x00000001
01064 #define TDF_NO_RESTART 0x00000002
01065 #define TDF_KERNEL_INITIATED 0x00000004
01066
01067
NTSTATUS
01068
PpSetDeviceClassChange(
01069 IN CONST GUID *EventGuid,
01070 IN CONST GUID *ClassGuid,
01071 IN PUNICODE_STRING SymbolicLinkName
01072 );
01073
01074
VOID
01075
PpSetPlugPlayEvent(
01076 IN CONST GUID *EventGuid,
01077 IN
PDEVICE_OBJECT DeviceObject
01078 );
01079
01080
NTSTATUS
01081
PpInitializeNotification(
01082 VOID
01083 );
01084
01085
VOID
01086
PpShutdownSystem (
01087 IN BOOLEAN Reboot,
01088 IN ULONG Phase,
01089 IN OUT PVOID *Context
01090 );
01091
01092
NTSTATUS
01093
PpSetPowerEvent(
01094 IN ULONG EventCode,
01095 IN
PKEVENT CompletionEvent OPTIONAL,
01096 OUT PNTSTATUS CompletionStatus OPTIONAL,
01097 OUT PPNP_VETO_TYPE VetoType OPTIONAL,
01098 OUT PUNICODE_STRING VetoName OPTIONAL
01099 );
01100
01101
NTSTATUS
01102
PpSetHwProfileChangeEvent(
01103 IN CONST GUID *EventGuid,
01104 IN
PKEVENT CompletionEvent OPTIONAL,
01105 OUT PNTSTATUS CompletionStatus OPTIONAL,
01106 OUT PPNP_VETO_TYPE VetoType OPTIONAL,
01107 OUT PUNICODE_STRING VetoName OPTIONAL
01108 );
01109
01110
NTSTATUS
01111
PpSynchronizeDeviceEventQueue(
01112 VOID
01113 );
01114
01115
NTSTATUS
01116
PpSetPowerVetoEvent(
01117 IN POWER_ACTION VetoedPowerOperation,
01118 IN
PKEVENT CompletionEvent OPTIONAL,
01119 OUT PNTSTATUS CompletionStatus OPTIONAL,
01120 IN
PDEVICE_OBJECT DeviceObject,
01121 IN PNP_VETO_TYPE VetoType,
01122 IN PUNICODE_STRING VetoName OPTIONAL
01123 );
01124
01125
01126
01127
01128
01129 ULONG
01130
IoPnPDeliverServicePowerNotification(
01131 ULONG PwrNotification,
01132 BOOLEAN Synchronous
01133 );
01134
01135
#endif // _PNP_