/*++ Copyright (c) 2004 Microsoft Corporation Module Name: dispmprt.h Abstract: This header contain the new Display Loader APIs. --*/ #ifndef _DISPMPRT_H_ #define _DISPMPRT_H_ #pragma warning(push) #pragma warning(disable:4115) // named type definition in parentheses #pragma warning(disable:4201) // nameless struct/union #pragma warning(disable:4214) // bit field types other than int #ifndef _ACPIIOCT_H_ #include #endif // // Old includes which are only kept for now for compatibility // #ifndef _NTOSP_ #define _NTOSP_ // // Structures used by the kernel drivers to describe which ports must be // hooked out directly from the V86 emulator to the driver. // typedef enum _EMULATOR_PORT_ACCESS_TYPE { Uchar, Ushort, Ulong } EMULATOR_PORT_ACCESS_TYPE, *PEMULATOR_PORT_ACCESS_TYPE; typedef struct _EMULATOR_ACCESS_ENTRY { ULONG BasePort; ULONG NumConsecutivePorts; EMULATOR_PORT_ACCESS_TYPE AccessType; UCHAR AccessMode; UCHAR StringSupport; PVOID Routine; } EMULATOR_ACCESS_ENTRY, *PEMULATOR_ACCESS_ENTRY; #endif // // Graphics support routines. // typedef VOID (*PBANKED_SECTION_ROUTINE) ( IN ULONG ReadBank, IN ULONG WriteBank, IN PVOID Context ); // // Exclude some items from video.h // #define _NTOSDEF_ #include #include // // Define types used in d3dukmdt.h, included via d3dkmdt.h that are not defined in this scope. // typedef unsigned int UINT; typedef unsigned long DWORD; typedef unsigned char BYTE; #include #include #include #define DlDebugPrintEx(arg) DlDebugPrint arg // // ** New definitions ********************************************************* // // // Available only for Vista (LONGHORN) and later // #if (NTDDI_VERSION >= NTDDI_LONGHORN) // // Define ACPI event IDs // #define ACPI_NOTIFY_DOCK_EVENT 0x77 #define ACPI_NOTIFY_PANEL_SWITCH 0x80 #define ACPI_NOTIFY_DEVICE_HOTPLUG 0x81 #define ACPI_NOTIFY_CYCLE_DISPLAY_HOTKEY 0x82 #define ACPI_NOTIFY_NEXT_DISPLAY_HOTKEY 0x83 #define ACPI_NOTIFY_PREV_DISPLAY_HOTKEY 0x84 #define ACPI_NOTIFY_CYCLE_BRIGHTNESS_HOTKEY 0x85 #define ACPI_NOTIFY_INC_BRIGHTNESS_HOTKEY 0x86 #define ACPI_NOTIFY_DEC_BRIGHTNESS_HOTKEY 0x87 #define ACPI_NOTIFY_ZERO_BRIGHTNESS_HOTKEY 0x88 #define ACPI_NOTIFY_VIDEO_WAKEUP 0x90 // // ACPI argument definitions // #define ACPI_ARG_ENABLE_SWITCH_EVENT 0x0 #define ACPI_ARG_ENABLE_AUTO_SWITCH 0x1 #define ACPI_ARG_DISABLE_SWITCH_EVENT 0x2 #define ACPI_ARG_ENABLE_AUTO_LCD_BRIGHTNESS 0x0 #define ACPI_ARG_DISABLE_AUTO_LCD_BRIGHTNESS 0x4 // // ACPI methods for the adapter // #define ACPI_METHOD_DISPLAY_DOS (ULONG)('SOD_') #define ACPI_METHOD_DISPLAY_DOD (ULONG)('DOD_') #define ACPI_METHOD_DISPLAY_ROM (ULONG)('MOR_') #define ACPI_METHOD_DISPLAY_GPD (ULONG)('DPG_') #define ACPI_METHOD_DISPLAY_SPD (ULONG)('DPS_') #define ACPI_METHOD_DISPLAY_VPO (ULONG)('OPV_') // // ACPI methods for children // #define ACPI_METHOD_OUTPUT_ADR (ULONG)('RDA_') #define ACPI_METHOD_OUTPUT_BCL (ULONG)('LCB_') #define ACPI_METHOD_OUTPUT_BCM (ULONG)('MCB_') #define ACPI_METHOD_OUTPUT_DDC (ULONG)('CDD_') #define ACPI_METHOD_OUTPUT_DCS (ULONG)('SCD_') #define ACPI_METHOD_OUTPUT_DGS (ULONG)('SGD_') #define ACPI_METHOD_OUTPUT_DSS (ULONG)('SSD_') // // ACPI Flags // #define DXGK_ACPI_POLL_DISPLAY_CHILDREN 0x00000001 #define DXGK_ACPI_CHANGE_DISPLAY_MODE 0x00000002 #define DXGK_ACPI_CHANGE_DISPLAY_TOPOLOGY 0x00000004 // // Exclude adapter access flags. // #define DXGK_EXCLUDE_EVICT_ALL 0x00000001 #define DXGK_EXCLUDE_CALL_SYNCHRONOUS 0x00000002 #define DXGK_EXCLUDE_BRIDGE_ACCESS 0x00000004 // // Max of 50 characters per string. // #define DXGK_MAX_STRING_LEN 50 #define DXGK_MAX_REG_SZ_LEN DXGK_MAX_STRING_LEN + 1 // // Supported device space types. // #define DXGK_WHICHSPACE_CONFIG PCI_WHICHSPACE_CONFIG #define DXGK_WHICHSPACE_ROM PCI_WHICHSPACE_ROM #define DXGK_WHICHSPACE_MCH 0x80000000 #define DXGK_WHICHSPACE_BRIDGE 0x80000001 // // Linked display adapter support. // typedef struct _LINKED_DEVICE { ULONG ChainUid; ULONG NumberOfLinksInChain; BOOLEAN LeadLink; } LINKED_DEVICE, *PLINKED_DEVICE; // // Type of ACPI notification event. // typedef enum _DXGK_EVENT_TYPE { DxgkUndefinedEvent, DxgkAcpiEvent, DxgkPowerStateEvent, DxgkDockingEvent } DXGK_EVENT_TYPE, *PDXGK_EVENT_TYPE; typedef struct _DXGK_VIDEO_OUTPUT_CAPABILITIES { D3DKMDT_VIDEO_OUTPUT_TECHNOLOGY InterfaceTechnology; D3DKMDT_MONITOR_ORIENTATION_AWARENESS MonitorOrientationAwareness; BOOLEAN SupportsSdtvModes; } DXGK_VIDEO_OUTPUT_CAPABILITIES, *PDXGK_VIDEO_OUTPUT_CAPABILITIES; typedef struct _DXGK_CHILD_CAPABILITIES { union { // // If (CHILD_DESCRIPTOR::ChildDeviceType == TypeVideoOutput) // DXGK_VIDEO_OUTPUT_CAPABILITIES VideoOutput; // // If (CHILD_DESCRIPTOR::ChildDeviceType == TypeOther) // struct { UINT MustBeZero; } Other; } Type; DXGK_CHILD_DEVICE_HPD_AWARENESS HpdAwareness; } DXGK_CHILD_CAPABILITIES, *PDXGK_CHILD_CAPABILITIES; typedef enum _DXGK_CHILD_DEVICE_TYPE { TypeUninitialized, TypeVideoOutput, TypeOther } DXGK_CHILD_DEVICE_TYPE, *PDXGK_CHILD_DEVICE_TYPE; // // Child descriptor structure returned to us from the miniport // // NOTE: If (ChildDeviceType==TypeVideoOutput) then (ChildUid == video present target ID) // typedef struct _DXGK_CHILD_DESCRIPTOR { DXGK_CHILD_DEVICE_TYPE ChildDeviceType; DXGK_CHILD_CAPABILITIES ChildCapabilities; ULONG AcpiUid; ULONG ChildUid; } DXGK_CHILD_DESCRIPTOR, *PDXGK_CHILD_DESCRIPTOR; typedef struct _DXGK_DEVICE_DESCRIPTOR { ULONG DescriptorOffset; ULONG DescriptorLength; PVOID DescriptorBuffer; } DXGK_DEVICE_DESCRIPTOR, *PDXGK_DEVICE_DESCRIPTOR; typedef struct _DXGK_GENERIC_DESCRIPTOR { WCHAR HardwareId[DXGK_MAX_REG_SZ_LEN]; WCHAR InstanceId[DXGK_MAX_REG_SZ_LEN]; WCHAR CompatibleId[DXGK_MAX_REG_SZ_LEN]; WCHAR DeviceText[DXGK_MAX_REG_SZ_LEN]; } DXGK_GENERIC_DESCRIPTOR, *PDXGK_GENERIC_DESCRIPTOR; // // Types of status that the miniport can report back to us // typedef enum _DXGK_CHILD_STATUS_TYPE{ StatusUninitialized, StatusConnection, StatusRotation } DXGK_CHILD_STATUS_TYPE, *PDXGK_CHILD_STATUS_TYPE; // // Child Status structure which can be queried directly or // indicated up by the miniport // typedef struct _DXGK_CHILD_STATUS { DXGK_CHILD_STATUS_TYPE Type; ULONG ChildUid; union { struct { BOOLEAN Connected; } HotPlug; struct { UCHAR Angle; } Rotation; }; } DXGK_CHILD_STATUS, *PDXGK_CHILD_STATUS; // // DxgkCbExcludeAdapterAccess callback. // typedef VOID (*DXGKDDI_PROTECTED_CALLBACK)( IN CONST PVOID MiniportDeviceContext, IN PVOID ProtectedCallbackContext, IN NTSTATUS ProtectionStatus ); // // GUID_DEVINTERFACE_I2C {2564AA4F-DDDB-4495-B497-6AD4A84163D7} // DEFINE_GUID(GUID_DEVINTERFACE_I2C, 0x2564AA4F, 0xDDDB, 0x4495, 0xB4, 0x97, 0x6A, 0xD4, 0xA8, 0x41, 0x63, 0xD7); // // GUID_DEVINTERFACE_OPM {BF4672DE-6B4E-4BE4-A325-68A91EA49C09} // DEFINE_GUID(GUID_DEVINTERFACE_OPM, 0xBF4672DE, 0x6B4E, 0x4BE4, 0xA3, 0x25, 0x68, 0xA9, 0x1E, 0xA4, 0x9C, 0x09); // // GUID_DEVINTERFACE_BRIGHTNESS {FDE5BBA4-B3F9-46FB-BDAA-0728CE3100B4} // DEFINE_GUID( GUID_DEVINTERFACE_BRIGHTNESS, 0xFDE5BBA4, 0xB3F9, 0x46FB, 0xBD, 0xAA, 0x07, 0x28, 0xCE, 0x31, 0x00, 0xB4); // // I2C Interface queried from the miniport. // #define DXGK_I2C_INTERFACE_VERSION_1 0x01 typedef NTSTATUS (*DXGKDDI_I2C_TRANSMIT_DATA_TO_DISPLAY)( IN PVOID MiniportDeviceContext, IN D3DDDI_VIDEO_PRESENT_TARGET_ID VidPnTargetId, IN ULONG SevenBitI2CAddress, IN ULONG DataLength, IN CONST PVOID Data ); typedef NTSTATUS (*DXGKDDI_I2C_RECEIVE_DATA_FROM_DISPLAY)( IN PVOID MiniportDeviceContext, IN D3DDDI_VIDEO_PRESENT_TARGET_ID VidPnTargetId, IN ULONG SevenBitI2CAddress, IN ULONG Flags, IN ULONG DataLength, OUT PVOID Data ); typedef struct _DXGK_I2C_INTERFACE { USHORT Size; USHORT Version; PVOID Context; PINTERFACE_REFERENCE InterfaceReference; PINTERFACE_DEREFERENCE InterfaceDereference; DXGKDDI_I2C_TRANSMIT_DATA_TO_DISPLAY DxgkDdiI2CTransmitDataToDisplay; DXGKDDI_I2C_RECEIVE_DATA_FROM_DISPLAY DxgkDdiI2CReceiveDataFromDisplay; } DXGK_I2C_INTERFACE, *PDXGK_I2C_INTERFACE; // // OPM Interface from the miniport. // #define DXGK_OPM_INTERFACE_VERSION_1 0x01 typedef NTSTATUS (*DXGKDDI_OPM_GET_CERTIFICATE_SIZE)( IN PVOID MiniportDeviceContext, IN DXGKMDT_CERTIFICATE_TYPE CertificateType, OUT PULONG CertificateSize ); typedef NTSTATUS (*DXGKDDI_OPM_GET_CERTIFICATE)( IN PVOID MiniportDeviceContext, IN DXGKMDT_CERTIFICATE_TYPE CertificateType, IN ULONG CertificateSize, OUT PVOID CertificateBuffer ); typedef NTSTATUS (*DXGKDDI_OPM_CREATE_PROTECTED_OUTPUT)( IN PVOID MiniportDeviceContext, IN D3DDDI_VIDEO_PRESENT_TARGET_ID VidPnTargetId, IN DXGKMDT_OPM_VIDEO_OUTPUT_SEMANTICS NewVideoOutputSemantics, OUT PHANDLE NewProtectedOutputHandle ); typedef NTSTATUS (*DXGKDDI_OPM_GET_RANDOM_NUMBER)( IN PVOID MiniportDeviceContext, IN HANDLE ProtectedOutputHandle, OUT PDXGKMDT_OPM_RANDOM_NUMBER RandomNumber ); typedef NTSTATUS (*DXGKDDI_OPM_SET_SIGNING_KEY_AND_SEQUENCE_NUMBERS)( IN PVOID MiniportDeviceContext, IN HANDLE ProtectedOutputHandle, IN CONST PDXGKMDT_OPM_ENCRYPTED_PARAMETERS EncryptedParameters ); typedef NTSTATUS (*DXGKDDI_OPM_GET_INFORMATION)( IN PVOID MiniportDeviceContext, IN HANDLE ProtectedOutputHandle, IN CONST PDXGKMDT_OPM_GET_INFO_PARAMETERS Parameters, OUT PDXGKMDT_OPM_REQUESTED_INFORMATION RequestedInformation ); typedef NTSTATUS (*DXGKDDI_OPM_GET_COPP_COMPATIBLE_INFORMATION)( IN PVOID MiniportDeviceContext, IN HANDLE ProtectedOutputHandle, IN CONST PDXGKMDT_OPM_COPP_COMPATIBLE_GET_INFO_PARAMETERS Parameters, OUT PDXGKMDT_OPM_REQUESTED_INFORMATION RequestedInformation ); typedef NTSTATUS (*DXGKDDI_OPM_CONFIGURE_PROTECTED_OUTPUT)( IN PVOID MiniportDeviceContext, IN HANDLE ProtectedOutputHandle, IN CONST PDXGKMDT_OPM_CONFIGURE_PARAMETERS Parameters, IN ULONG AdditionalParametersSize, IN CONST PVOID AdditionalParameters ); typedef NTSTATUS (*DXGKDDI_OPM_DESTROY_PROTECTED_OUTPUT)( IN PVOID MiniportDeviceContext, IN HANDLE ProtectedOutputHandle ); typedef struct _DXGK_OPM_INTERFACE { USHORT Size; USHORT Version; PVOID Context; PINTERFACE_REFERENCE InterfaceReference; PINTERFACE_DEREFERENCE InterfaceDereference; DXGKDDI_OPM_GET_CERTIFICATE_SIZE DxgkDdiOPMGetCertificateSize; DXGKDDI_OPM_GET_CERTIFICATE DxgkDdiOPMGetCertificate; DXGKDDI_OPM_CREATE_PROTECTED_OUTPUT DxgkDdiOPMCreateProtectedOutput; DXGKDDI_OPM_GET_RANDOM_NUMBER DxgkDdiOPMGetRandomNumber; DXGKDDI_OPM_SET_SIGNING_KEY_AND_SEQUENCE_NUMBERS DxgkDdiOPMSetSigningKeyAndSequenceNumbers; DXGKDDI_OPM_GET_INFORMATION DxgkDdiOPMGetInformation; DXGKDDI_OPM_GET_COPP_COMPATIBLE_INFORMATION DxgkDdiOPMGetCOPPCompatibleInformation; DXGKDDI_OPM_CONFIGURE_PROTECTED_OUTPUT DxgkDdiOPMConfigureProtectedOutput; DXGKDDI_OPM_DESTROY_PROTECTED_OUTPUT DxgkDdiOPMDestroyProtectedOutput; } DXGK_OPM_INTERFACE, *PDXGK_OPM_INTERFACE; #define DXGK_BRIGHTNESS_INTERFACE_VERSION_1 0x01 typedef NTSTATUS (*DXGK_BRIGHTNESS_GET_POSSIBLE)( IN PVOID Context, IN ULONG BufferSize, OUT PUCHAR LevelCount, OUT PUCHAR BrightnessLevels ); typedef NTSTATUS (*DXGK_BRIGHTNESS_SET)( IN PVOID Context, IN UCHAR Brightness ); typedef NTSTATUS (*DXGK_BRIGHTNESS_GET)( IN PVOID Context, IN PUCHAR Brightness ); typedef struct { IN USHORT Size; IN USHORT Version; OUT PVOID Context; OUT PINTERFACE_REFERENCE InterfaceReference; OUT PINTERFACE_DEREFERENCE InterfaceDereference; OUT DXGK_BRIGHTNESS_GET_POSSIBLE GetPossibleBrightness; OUT DXGK_BRIGHTNESS_SET SetBrightness; OUT DXGK_BRIGHTNESS_GET GetBrightness; } DXGK_BRIGHTNESS_INTERFACE, *PDXGK_BRIGHTNESS_INTERFACE; // // Services exported by DxgkCbQueryServices() // typedef enum { DxgkServicesAgp, DxgkServicesDebugReport, DxgkServicesTimedOperation } DXGK_SERVICES; // // AGP Services // #define DXGK_AGP_INTERFACE_VERSION_1 0x01 #define DXGK_AGPCOMMAND_AGP1X 0x00001 #define DXGK_AGPCOMMAND_AGP2X 0x00002 #define DXGK_AGPCOMMAND_AGP4X 0x00004 #define DXGK_AGPCOMMAND_AGP8X 0x00008 #define DXGK_AGPCOMMAND_DISABLE_SBA 0x10000 #define DXGK_AGPCOMMAND_DISABLE_FW 0x20000 typedef NTSTATUS (APIENTRY *DXGKCB_AGP_ALLOCATE_POOL)( IN HANDLE Context, IN ULONG AllocationSize, IN MEMORY_CACHING_TYPE CacheType, OUT PPHYSICAL_ADDRESS PhysicalAddress, OUT PVOID *VirtualAddress ); typedef NTSTATUS (APIENTRY *DXGKCB_AGP_FREE_POOL)( IN HANDLE Context, IN PVOID VirtualAddress ); typedef NTSTATUS (APIENTRY *DXGKCB_AGP_SET_COMMAND)( IN HANDLE Context, IN ULONG Command ); typedef struct _DXGK_AGP_INTERFACE { USHORT Size; USHORT Version; PVOID Context; PINTERFACE_REFERENCE InterfaceReference; PINTERFACE_DEREFERENCE InterfaceDereference; DXGKCB_AGP_ALLOCATE_POOL AgpAllocatePool; DXGKCB_AGP_FREE_POOL AgpFreePool; DXGKCB_AGP_SET_COMMAND AgpSetCommand; } DXGK_AGP_INTERFACE, *PDXGK_AGP_INTERFACE; // // Debug Report API // DECLARE_HANDLE(DXGK_DEBUG_REPORT_HANDLE); #define DXGK_DEBUG_REPORT_INTERFACE_VERSION_1 0x01 #define DXGK_DEBUG_REPORT_MAX_SIZE 0xF800 typedef struct _DXGK_DEBUG_REPORT_INTERFACE { USHORT Size; USHORT Version; PVOID Context; PINTERFACE_REFERENCE InterfaceReference; PINTERFACE_DEREFERENCE InterfaceDereference; DXGK_DEBUG_REPORT_HANDLE (*DbgReportCreate)( IN HANDLE DeviceHandle, IN ULONG ulCode, IN ULONG_PTR ulpArg1, IN ULONG_PTR ulpArg2, IN ULONG_PTR ulpArg3, IN ULONG_PTR ulpArg4 ); BOOLEAN (*DbgReportSecondaryData)( IN OUT DXGK_DEBUG_REPORT_HANDLE hReport, IN __in_bcount(ulDataSize) PVOID pvData, IN ULONG ulDataSize ); VOID (*DbgReportComplete)( IN OUT DXGK_DEBUG_REPORT_HANDLE hReport ); } DXGK_DEBUG_REPORT_INTERFACE, *PDXGK_DEBUG_REPORT_INTERFACE; // // Timed Operation API // #define DXGK_TIMED_OPERATION_INTERFACE_VERSION_1 0x01 #define DXGK_TIMED_OPERATION_TIMEOUT_MAX_SECONDS 5 typedef struct _DXGK_TIMED_OPERATION { USHORT Size; ULONG_PTR OwnerTag; BOOLEAN OsHandled; BOOLEAN TimeoutTriggered; LARGE_INTEGER Timeout; LARGE_INTEGER StartTick; } DXGK_TIMED_OPERATION, *PDXGK_TIMED_OPERATION; typedef struct _DXGK_TIMED_OPERATION_INTERFACE { USHORT Size; USHORT Version; PVOID Context; PINTERFACE_REFERENCE InterfaceReference; PINTERFACE_DEREFERENCE InterfaceDereference; NTSTATUS (*TimedOperationStart)( OUT DXGK_TIMED_OPERATION* Op, IN const LARGE_INTEGER* Timeout, IN BOOLEAN OsHandled ); NTSTATUS (*TimedOperationDelay)( IN OUT DXGK_TIMED_OPERATION* Op, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN const LARGE_INTEGER* Interval OPTIONAL ); NTSTATUS (*TimedOperationWaitForSingleObject)( IN OUT DXGK_TIMED_OPERATION* Op, IN PVOID Object, IN KWAIT_REASON WaitReason, IN KPROCESSOR_MODE WaitMode, IN BOOLEAN Alertable, IN const LARGE_INTEGER* Timeout OPTIONAL ); } DXGK_TIMED_OPERATION_INTERFACE, *PDXGK_TIMED_OPERATION_INTERFACE; typedef enum { DockStateUnsupported = 0, DockStateUnDocked = 1, DockStateDocked = 2, DockStateUnknown = 3, } DOCKING_STATE; // // Device Information Structure to provide OS provided data // structures to the miniport // typedef struct _DXGK_DEVICE_INFO { PVOID MiniportDeviceContext; PDEVICE_OBJECT PhysicalDeviceObject; UNICODE_STRING DeviceRegistryPath; PCM_RESOURCE_LIST TranslatedResourceList; LARGE_INTEGER SystemMemorySize; PHYSICAL_ADDRESS HighestPhysicalAddress; PHYSICAL_ADDRESS AgpApertureBase; SIZE_T AgpApertureSize; DOCKING_STATE DockingState; } DXGK_DEVICE_INFO, *PDXGK_DEVICE_INFO; // // DxgKrnl interface // #define DXGK_ACPI_PASS_ARGS_TO_CHILDREN 'araP' typedef __drv_requiresIRQL(PASSIVE_LEVEL) NTSTATUS (APIENTRY *DXGKCB_EVAL_ACPI_METHOD)( IN HANDLE DeviceHandle, IN ULONG DeviceUid, IN PACPI_EVAL_INPUT_BUFFER_COMPLEX AcpiInputBuffer, IN ULONG AcpiInputSize, IN OUT PACPI_EVAL_OUTPUT_BUFFER AcpiOutputBuffer, IN ULONG AcpiOutputSize ); typedef __drv_requiresIRQL(PASSIVE_LEVEL) NTSTATUS (APIENTRY *DXGKCB_GET_DEVICE_INFORMATION)( IN HANDLE DeviceHandle, OUT PDXGK_DEVICE_INFO DeviceInfo ); typedef NTSTATUS (APIENTRY *DXGKCB_INDICATE_CHILD_STATUS)( IN HANDLE DeviceHandle, IN PDXGK_CHILD_STATUS ChildStatus ); typedef __drv_requiresIRQL(PASSIVE_LEVEL) NTSTATUS (APIENTRY *DXGKCB_MAP_MEMORY)( IN HANDLE DeviceHandle, IN PHYSICAL_ADDRESS TranslatedAddress, IN ULONG Length, IN BOOLEAN InIoSpace, IN BOOLEAN MapToUserMode, IN MEMORY_CACHING_TYPE CacheType, OUT PVOID *VirtualAddress ); typedef __drv_requiresIRQL(PASSIVE_LEVEL) NTSTATUS (APIENTRY *DXGKCB_QUERY_SERVICES)( IN HANDLE DeviceHandle, IN DXGK_SERVICES ServicesType, IN OUT PINTERFACE Interface ); typedef BOOLEAN (APIENTRY *DXGKCB_QUEUE_DPC)( IN HANDLE DeviceHandle ); typedef NTSTATUS (APIENTRY *DXGKCB_READ_DEVICE_SPACE)( IN HANDLE DeviceHandle, IN ULONG DataType, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length, OUT PULONG BytesRead ); typedef NTSTATUS (APIENTRY *DXGKCB_SYNCHRONIZE_EXECUTION)( IN HANDLE DeviceHandle, IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine, IN PVOID Context, IN ULONG MessageNumber, OUT PBOOLEAN ReturnValue ); typedef __drv_requiresIRQL(PASSIVE_LEVEL) NTSTATUS (APIENTRY *DXGKCB_UNMAP_MEMORY)( IN HANDLE DeviceHandle, IN PVOID VirtualAddress ); typedef NTSTATUS (APIENTRY *DXGKCB_WRITE_DEVICE_SPACE)( IN HANDLE DeviceHandle, IN ULONG DataType, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length, OUT PULONG BytesWritten ); typedef __drv_requiresIRQL(PASSIVE_LEVEL) NTSTATUS (APIENTRY *DXGKCB_IS_DEVICE_PRESENT)( IN HANDLE DeviceHandle, IN PPCI_DEVICE_PRESENCE_PARAMETERS DevicePresenceParameters, OUT PBOOLEAN DevicePresent ); typedef VOID (APIENTRY *DXGKCB_LOG_ETW_EVENT)( IN CONST LPCGUID EventGuid, IN UCHAR Type, IN USHORT EventBufferSize, IN PVOID EventBuffer ); typedef __drv_requiresIRQL(PASSIVE_LEVEL) NTSTATUS (APIENTRY *DXGKCB_EXCLUDE_ADAPTER_ACCESS)( IN HANDLE DeviceHandle, IN ULONG Attributes, IN DXGKDDI_PROTECTED_CALLBACK DxgkProtectedCallback, IN PVOID ProtectedCallbackContext ); typedef struct _DXGK_START_INFO { ULONG RequiredDmaQueueEntry; GUID AdapterGuid; } DXGK_START_INFO, *PDXGK_START_INFO; typedef struct _DXGKRNL_INTERFACE { ULONG Size; ULONG Version; HANDLE DeviceHandle; DXGKCB_EVAL_ACPI_METHOD DxgkCbEvalAcpiMethod; DXGKCB_GET_DEVICE_INFORMATION DxgkCbGetDeviceInformation; DXGKCB_INDICATE_CHILD_STATUS DxgkCbIndicateChildStatus; DXGKCB_MAP_MEMORY DxgkCbMapMemory; DXGKCB_QUEUE_DPC DxgkCbQueueDpc; DXGKCB_QUERY_SERVICES DxgkCbQueryServices; DXGKCB_READ_DEVICE_SPACE DxgkCbReadDeviceSpace; DXGKCB_SYNCHRONIZE_EXECUTION DxgkCbSynchronizeExecution; DXGKCB_UNMAP_MEMORY DxgkCbUnmapMemory; DXGKCB_WRITE_DEVICE_SPACE DxgkCbWriteDeviceSpace; DXGKCB_IS_DEVICE_PRESENT DxgkCbIsDevicePresent; DXGKCB_GETHANDLEDATA DxgkCbGetHandleData; DXGKCB_GETHANDLEPARENT DxgkCbGetHandleParent; DXGKCB_ENUMHANDLECHILDREN DxgkCbEnumHandleChildren; DXGKCB_NOTIFY_INTERRUPT DxgkCbNotifyInterrupt; DXGKCB_NOTIFY_DPC DxgkCbNotifyDpc; DXGKCB_QUERYVIDPNINTERFACE DxgkCbQueryVidPnInterface; DXGKCB_QUERYMONITORINTERFACE DxgkCbQueryMonitorInterface; DXGKCB_GETCAPTUREADDRESS DxgkCbGetCaptureAddress; DXGKCB_LOG_ETW_EVENT DxgkCbLogEtwEvent; DXGKCB_EXCLUDE_ADAPTER_ACCESS DxgkCbExcludeAdapterAccess; } DXGKRNL_INTERFACE, *PDXGKRNL_INTERFACE; // // Kernel Mode Driver Interface // // // Define parameter types for SAL-annotated DDI parameters. These are used by // the DDI function name typedefs. They are not needed in a driver's DDI function // definitions, and should not be used in driver code. // // Naming convention: Concatenate all SAL annotations, an underscore, other modifiers // such as CONST, and the type of the parameter, and use uppercase // only. // typedef __in CONST PDEVICE_OBJECT IN_CONST_PDEVICE_OBJECT; typedef __inout PLINKED_DEVICE INOUT_PLINKED_DEVICE; typedef __inout PDXGK_CHILD_DESCRIPTOR INOUT_PDXGK_CHILD_DESCRIPTOR; typedef __in PDXGK_CHILD_STATUS IN_PDXGK_CHILD_STATUS; typedef __inout PDXGK_DEVICE_DESCRIPTOR INOUT_PDXGK_DEVICE_DESCRIPTOR; typedef __in DXGK_EVENT_TYPE IN_DXGK_EVENT_TYPE; typedef __in PDXGK_START_INFO IN_PDXGK_START_INFO; typedef __in PDXGKRNL_INTERFACE IN_PDXGKRNL_INTERFACE; typedef __in PQUERY_INTERFACE IN_PQUERY_INTERFACE; typedef __in PVIDEO_REQUEST_PACKET IN_PVIDEO_REQUEST_PACKET; // // Function name typedefs // typedef __checkReturn NTSTATUS DXGKDDI_ADD_DEVICE( IN_CONST_PDEVICE_OBJECT PhysicalDeviceObject, OUT_PPVOID MiniportDeviceContext ); typedef __checkReturn NTSTATUS DXGKDDI_START_DEVICE( IN_CONST_PVOID MiniportDeviceContext, IN_PDXGK_START_INFO DxgkStartInfo, IN_PDXGKRNL_INTERFACE DxgkInterface, OUT_PULONG NumberOfVideoPresentSources, OUT_PULONG NumberOfChildren ); typedef __checkReturn NTSTATUS DXGKDDI_STOP_DEVICE( IN_CONST_PVOID MiniportDeviceContext ); typedef __checkReturn NTSTATUS DXGKDDI_REMOVE_DEVICE( IN_CONST_PVOID MiniportDeviceContext ); typedef __checkReturn NTSTATUS DXGKDDI_DISPATCH_IO_REQUEST( IN_CONST_PVOID MiniportDeviceContext, IN_ULONG VidPnSourceId, IN_PVIDEO_REQUEST_PACKET VideoRequestPacket ); typedef __checkReturn NTSTATUS DXGKDDI_QUERY_CHILD_RELATIONS( IN_CONST_PVOID MiniportDeviceContext, INOUT_PDXGK_CHILD_DESCRIPTOR ChildRelations, IN_ULONG ChildRelationsSize ); typedef __checkReturn NTSTATUS DXGKDDI_QUERY_CHILD_STATUS( IN_CONST_PVOID MiniportDeviceContext, IN_PDXGK_CHILD_STATUS ChildStatus, IN_BOOLEAN NonDestructiveOnly ); typedef __checkReturn BOOLEAN DXGKDDI_INTERRUPT_ROUTINE( IN_CONST_PVOID MiniportDeviceContext, IN_ULONG MessageNumber ); typedef VOID DXGKDDI_DPC_ROUTINE( IN_CONST_PVOID MiniportDeviceContext ); typedef __checkReturn NTSTATUS DXGKDDI_QUERY_DEVICE_DESCRIPTOR( IN_CONST_PVOID MiniportDeviceContext, IN_ULONG ChildUid, INOUT_PDXGK_DEVICE_DESCRIPTOR DeviceDescriptor ); typedef __checkReturn NTSTATUS DXGKDDI_SET_POWER_STATE( IN_CONST_PVOID MiniportDeviceContext, IN_ULONG DeviceUid, IN_DEVICE_POWER_STATE DevicePowerState, IN_POWER_ACTION ActionType ); typedef __checkReturn NTSTATUS DXGKDDI_NOTIFY_ACPI_EVENT( IN_CONST_PVOID MiniportDeviceContext, IN_DXGK_EVENT_TYPE EventType, IN_ULONG Event, IN_PVOID Argument, OUT_PULONG AcpiFlags ); typedef VOID DXGKDDI_RESET_DEVICE( IN_CONST_PVOID MiniportDeviceContext ); typedef VOID DXGKDDI_UNLOAD( VOID ); typedef __checkReturn NTSTATUS DXGKDDI_QUERY_INTERFACE( IN_CONST_PVOID MiniportDeviceContext, IN_PQUERY_INTERFACE QueryInterface ); typedef VOID DXGKDDI_CONTROL_ETW_LOGGING( IN_BOOLEAN Enable, IN_ULONG Flags, IN_UCHAR Level ); typedef __checkReturn NTSTATUS DXGKDDI_LINK_DEVICE( IN_CONST_PDEVICE_OBJECT PhysicalDeviceObject, IN_CONST_PVOID MiniportDeviceContext, INOUT_PLINKED_DEVICE LinkedDevice ); // // Function pointer typedefs // typedef DXGKDDI_ADD_DEVICE *PDXGKDDI_ADD_DEVICE; typedef DXGKDDI_START_DEVICE *PDXGKDDI_START_DEVICE; typedef DXGKDDI_STOP_DEVICE *PDXGKDDI_STOP_DEVICE; typedef DXGKDDI_REMOVE_DEVICE *PDXGKDDI_REMOVE_DEVICE; typedef DXGKDDI_DISPATCH_IO_REQUEST *PDXGKDDI_DISPATCH_IO_REQUEST; typedef DXGKDDI_QUERY_CHILD_RELATIONS *PDXGKDDI_QUERY_CHILD_RELATIONS; typedef DXGKDDI_QUERY_CHILD_STATUS *PDXGKDDI_QUERY_CHILD_STATUS; typedef DXGKDDI_INTERRUPT_ROUTINE *PDXGKDDI_INTERRUPT_ROUTINE; typedef DXGKDDI_DPC_ROUTINE *PDXGKDDI_DPC_ROUTINE; typedef DXGKDDI_QUERY_DEVICE_DESCRIPTOR *PDXGKDDI_QUERY_DEVICE_DESCRIPTOR; typedef DXGKDDI_SET_POWER_STATE *PDXGKDDI_SET_POWER_STATE; typedef DXGKDDI_NOTIFY_ACPI_EVENT *PDXGKDDI_NOTIFY_ACPI_EVENT; typedef DXGKDDI_RESET_DEVICE *PDXGKDDI_RESET_DEVICE; typedef DXGKDDI_UNLOAD *PDXGKDDI_UNLOAD; typedef DXGKDDI_QUERY_INTERFACE *PDXGKDDI_QUERY_INTERFACE; typedef DXGKDDI_CONTROL_ETW_LOGGING *PDXGKDDI_CONTROL_ETW_LOGGING; typedef DXGKDDI_LINK_DEVICE *PDXGKDDI_LINK_DEVICE; // // Driver initialization data structure // typedef struct _DRIVER_INITIALIZATION_DATA { ULONG Version; PDXGKDDI_ADD_DEVICE DxgkDdiAddDevice; PDXGKDDI_START_DEVICE DxgkDdiStartDevice; PDXGKDDI_STOP_DEVICE DxgkDdiStopDevice; PDXGKDDI_REMOVE_DEVICE DxgkDdiRemoveDevice; PDXGKDDI_DISPATCH_IO_REQUEST DxgkDdiDispatchIoRequest; PDXGKDDI_INTERRUPT_ROUTINE DxgkDdiInterruptRoutine; PDXGKDDI_DPC_ROUTINE DxgkDdiDpcRoutine; PDXGKDDI_QUERY_CHILD_RELATIONS DxgkDdiQueryChildRelations; PDXGKDDI_QUERY_CHILD_STATUS DxgkDdiQueryChildStatus; PDXGKDDI_QUERY_DEVICE_DESCRIPTOR DxgkDdiQueryDeviceDescriptor; PDXGKDDI_SET_POWER_STATE DxgkDdiSetPowerState; PDXGKDDI_NOTIFY_ACPI_EVENT DxgkDdiNotifyAcpiEvent; PDXGKDDI_RESET_DEVICE DxgkDdiResetDevice; PDXGKDDI_UNLOAD DxgkDdiUnload; PDXGKDDI_QUERY_INTERFACE DxgkDdiQueryInterface; PDXGKDDI_CONTROL_ETW_LOGGING DxgkDdiControlEtwLogging; PDXGKDDI_QUERYADAPTERINFO DxgkDdiQueryAdapterInfo; PDXGKDDI_CREATEDEVICE DxgkDdiCreateDevice; PDXGKDDI_CREATEALLOCATION DxgkDdiCreateAllocation; PDXGKDDI_DESTROYALLOCATION DxgkDdiDestroyAllocation; PDXGKDDI_DESCRIBEALLOCATION DxgkDdiDescribeAllocation; PDXGKDDI_GETSTANDARDALLOCATIONDRIVERDATA DxgkDdiGetStandardAllocationDriverData; PDXGKDDI_ACQUIRESWIZZLINGRANGE DxgkDdiAcquireSwizzlingRange; PDXGKDDI_RELEASESWIZZLINGRANGE DxgkDdiReleaseSwizzlingRange; PDXGKDDI_PATCH DxgkDdiPatch; PDXGKDDI_SUBMITCOMMAND DxgkDdiSubmitCommand; PDXGKDDI_PREEMPTCOMMAND DxgkDdiPreemptCommand; PDXGKDDI_BUILDPAGINGBUFFER DxgkDdiBuildPagingBuffer; PDXGKDDI_SETPALETTE DxgkDdiSetPalette; PDXGKDDI_SETPOINTERPOSITION DxgkDdiSetPointerPosition; PDXGKDDI_SETPOINTERSHAPE DxgkDdiSetPointerShape; PDXGKDDI_RESETFROMTIMEOUT DxgkDdiResetFromTimeout; PDXGKDDI_RESTARTFROMTIMEOUT DxgkDdiRestartFromTimeout; PDXGKDDI_ESCAPE DxgkDdiEscape; PDXGKDDI_COLLECTDBGINFO DxgkDdiCollectDbgInfo; PDXGKDDI_QUERYCURRENTFENCE DxgkDdiQueryCurrentFence; PDXGKDDI_ISSUPPORTEDVIDPN DxgkDdiIsSupportedVidPn; PDXGKDDI_RECOMMENDFUNCTIONALVIDPN DxgkDdiRecommendFunctionalVidPn; PDXGKDDI_ENUMVIDPNCOFUNCMODALITY DxgkDdiEnumVidPnCofuncModality; PDXGKDDI_SETVIDPNSOURCEADDRESS DxgkDdiSetVidPnSourceAddress; PDXGKDDI_SETVIDPNSOURCEVISIBILITY DxgkDdiSetVidPnSourceVisibility; PDXGKDDI_COMMITVIDPN DxgkDdiCommitVidPn; PDXGKDDI_UPDATEACTIVEVIDPNPRESENTPATH DxgkDdiUpdateActiveVidPnPresentPath; PDXGKDDI_RECOMMENDMONITORMODES DxgkDdiRecommendMonitorModes; PDXGKDDI_RECOMMENDVIDPNTOPOLOGY DxgkDdiRecommendVidPnTopology; PDXGKDDI_GETSCANLINE DxgkDdiGetScanLine; PDXGKDDI_STOPCAPTURE DxgkDdiStopCapture; PDXGKDDI_CONTROLINTERRUPT DxgkDdiControlInterrupt; PDXGKDDI_CREATEOVERLAY DxgkDdiCreateOverlay; // // Device functions // PDXGKDDI_DESTROYDEVICE DxgkDdiDestroyDevice; PDXGKDDI_OPENALLOCATIONINFO DxgkDdiOpenAllocation; PDXGKDDI_CLOSEALLOCATION DxgkDdiCloseAllocation; PDXGKDDI_RENDER DxgkDdiRender; PDXGKDDI_PRESENT DxgkDdiPresent; // // Overlay functions // PDXGKDDI_UPDATEOVERLAY DxgkDdiUpdateOverlay; PDXGKDDI_FLIPOVERLAY DxgkDdiFlipOverlay; PDXGKDDI_DESTROYOVERLAY DxgkDdiDestroyOverlay; // // Context supports. // PDXGKDDI_CREATECONTEXT DxgkDdiCreateContext; PDXGKDDI_DESTROYCONTEXT DxgkDdiDestroyContext; // // Linked Display Adapter support. // PDXGKDDI_LINK_DEVICE DxgkDdiLinkDevice; PDXGKDDI_SETDISPLAYPRIVATEDRIVERFORMAT DxgkDdiSetDisplayPrivateDriverFormat; #if (DXGKDDI_INTERFACE_VERSION >= DXGKDDI_INTERFACE_VERSION_WIN7) // // Extended for WDDM 2.0 // PDXGKDDI_DESCRIBEPAGETABLE DxgkDdiDescribePageTable; PDXGKDDI_UPDATEPAGETABLE DxgkDdiUpdatePageTable; PDXGKDDI_UPDATEPAGEDIRECTORY DxgkDdiUpdatePageDirectory; PDXGKDDI_MOVEPAGEDIRECTORY DxgkDdiMovePageDirectory; PDXGKDDI_SUBMITRENDER DxgkDdiSubmitRender; PDXGKDDI_CREATEALLOCATION2 DxgkDdiCreateAllocation2; // // GDI acceleration. Extended for WDDM 1.0 // PDXGKDDI_RENDER DxgkDdiRenderKm; // // New DMM DDIs for CCD support // VOID* Reserved; PDXGKDDI_QUERYVIDPNHWCAPABILITY DxgkDdiQueryVidPnHWCapability; #endif // DXGKDDI_INTERFACE_VERSION } DRIVER_INITIALIZATION_DATA, *PDRIVER_INITIALIZATION_DATA; // // *** Displib definitions **************************************************** // typedef enum _DEBUG_LEVEL { DlDebugError, DlDebugWarning, DlDebugTrace, DlDebugInfo } DEBUG_LEVEL; // // Functions exported by DispLib // NTSTATUS DxgkInitialize( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath, IN PDRIVER_INITIALIZATION_DATA DriverInitializationData ); PVOID DlAllocateCommonBuffer( IN PVOID DeviceHandle, IN PVP_DMA_ADAPTER DlpDmaAdapter, IN ULONG DesiredLength, OUT PPHYSICAL_ADDRESS LogicalAddress, IN BOOLEAN CacheEnabled, OUT PVOID Reserved ); PVOID DlAllocatePool( IN PVOID DeviceHandle, IN VP_POOL_TYPE PoolType, IN SIZE_T NumberOfBytes, IN ULONG Tag ); VOID DlClearEvent( IN PVOID DeviceHandle, IN PEVENT pEvent ); VP_STATUS DlCreateEvent( IN PVOID DeviceHandle, IN ULONG EventFlag, PVOID Unused, OUT PEVENT *ppEvent ); VOID DlDebugPrint( IN DEBUG_LEVEL DebugPrintLevel, IN __in PCHAR DebugMessage, ... ); VP_STATUS DlDeleteEvent( IN PVOID DeviceHandle, IN PEVENT pEvent ); VP_STATUS DlEnumerateChildren( IN PVOID DeviceHandle, IN PVOID Reserved ); VOID DlFreeDeviceBase( IN PVOID DeviceHandle, IN PVOID MappedAddress ); VOID DlFreePool( IN PVOID DeviceHandle, IN PVOID Ptr ); NTSTATUS DlGetAccessRanges( PVOID DeviceHandle, ULONG NumRequestedResources, PIO_RESOURCE_DESCRIPTOR RequestedResources OPTIONAL, ULONG NumAccessRanges, PVIDEO_ACCESS_RANGE AccessRanges, PVOID VendorId, PVOID DeviceId, PULONG Slot ); PVOID DlGetAssociatedDeviceExtension( IN PVOID DeviceObject ); PVOID DlGetDeviceBase( IN PVOID DeviceHandle, IN PHYSICAL_ADDRESS IoAddress, IN ULONG NumberOfUchars, IN UCHAR InIoSpace ); PVP_DMA_ADAPTER DlGetDmaAdapter( IN PVOID DeviceHandle, IN PVP_DEVICE_DESCRIPTION DlpDeviceDescription ); VP_STATUS DlGetRegistryParameters( IN PVOID DeviceHandle, IN __in PWSTR ParameterName, IN UCHAR IsParameterFileName, IN PMINIPORT_GET_REGISTRY_ROUTINE CallbackRoutine, IN PVOID Context ); __allocator PVOID DlGetRomImage( IN PVOID DeviceHandle, IN PVOID Unused1, IN ULONG Unused2, IN ULONG Length ); VP_STATUS DlGetVersion( IN PVOID DeviceHandle, OUT PVPOSVERSIONINFO pDlpOsVersionInfo ); PVOID DlLockBuffer( IN PVOID DeviceHandle, IN PVOID BaseAddress, IN ULONG Length, IN VP_LOCK_OPERATION Operation ); VOID DlLogError( IN PVOID DeviceHandle, IN PVIDEO_REQUEST_PACKET Vrp OPTIONAL, IN VP_STATUS ErrorCode, IN ULONG UniqueId ); VP_STATUS DlMapMemory( IN PVOID DeviceHandle, IN PHYSICAL_ADDRESS TranslatedAddress, IN OUT PULONG Length, IN PULONG InIoSpace, IN OUT PVOID *VirtualAddress ); LONGLONG DlQueryPerformanceCounter( IN PVOID pDeviceHandle, OUT PLONGLONG pllPerformanceFrequency OPTIONAL ); VOID DlReleaseCommonBuffer( IN PVOID DeviceHandle, IN PVP_DMA_ADAPTER DlpDmaAdapter, IN ULONG Length, IN PHYSICAL_ADDRESS LogicalAddress, IN PVOID VirtualAddress, IN BOOLEAN CacheEnabled ); BOOLEAN DlScanRom( IN PVOID DeviceHandle, IN PUCHAR RomBase, IN ULONG RomLength, IN PUCHAR String ); LONG DlSetEvent( IN PVOID DeviceHandle, IN PEVENT pEvent ); VP_STATUS DlSetRegistryParameters( IN PVOID DeviceHandle, IN __in PWSTR ValueName, IN __in_bcount(ValueLength) PVOID ValueData, IN ULONG ValueLength ); VP_STATUS DlSetTrappedEmulatorPorts( IN PVOID DeviceHandle, IN ULONG NumAccessRanges, IN PVIDEO_ACCESS_RANGE AccessRange ); VOID DlStopTimer( PVOID DeviceHandle ); VOID DlUnlockBuffer( IN PVOID DeviceHandle, IN PVOID Mdl ); VP_STATUS DlVerifyAccessRanges( PVOID DeviceHandle, ULONG NumAccessRanges, PVIDEO_ACCESS_RANGE AccessRanges ); VP_STATUS DlWaitForSingleObject( IN PVOID DeviceHandle, IN PVOID pEvent, IN PLARGE_INTEGER Timeout ); VP_STATUS DlDisableInterrupt( IN PVOID DeviceHandle ); VP_STATUS DlEnableInterrupt( IN PVOID DeviceHandle ); NTSTATUS DlEvalAcpiMethod( IN HANDLE DeviceHandle, IN ULONG DeviceUid, IN PACPI_EVAL_INPUT_BUFFER_COMPLEX AcpiInputBuffer, IN ULONG AcpiInputSize, IN OUT PACPI_EVAL_OUTPUT_BUFFER AcpiOutputBuffer, IN ULONG AcpiOutputSize ); NTSTATUS DlGetDeviceInformation( IN PVOID DeviceHandle, OUT PDXGK_DEVICE_INFO DeviceInfo ); NTSTATUS DlIndicateChildStatus( IN PVOID DeviceHandle, IN PDXGK_CHILD_STATUS ChildStatus ); NTSTATUS DlMapMemoryEx( IN PVOID DeviceHandle, IN PHYSICAL_ADDRESS TranslatedAddress, IN OUT PULONG Length, IN PULONG InIoSpace, IN HANDLE ProcessHandle, IN OUT PVOID *VirtualAddress, IN BOOLEAN MapToUserMode ); NTSTATUS DlQueryServices( IN PVOID DeviceHandle, IN VIDEO_PORT_SERVICES ServicesType, IN OUT PINTERFACE Interface ); BOOLEAN DlQueueDpc( IN PVOID DeviceHandle ); ULONG DlReadDeviceSpace( IN PVOID DeviceHandle, IN ULONG DataType, IN ULONG SlotNumber, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length ); ULONG DlSetBusData( IN PVOID DeviceHandle, IN ULONG BusDataType, IN ULONG SlotNumber, IN PVOID Buffer, IN ULONG Offset, IN ULONG Length ); BOOLEAN DlSynchronizeExecution( PVOID DeviceHandle, VIDEO_SYNCHRONIZE_PRIORITY Priority, PMINIPORT_SYNCHRONIZE_ROUTINE SynchronizeRoutine, PVOID Context, ULONG MessageNumber ); NTSTATUS DlUnmapMemory( PVOID DeviceHandle, PVOID VirtualAddress, HANDLE ProcessHandle ); #endif // (NTDDI_VERSION >= NTDDI_LONGHORN) #pragma warning(pop) #endif // _DISPMPRT_H_