// D3DKMTInterface.h: interface for the CD3DKMTInterface class. // // created by Unwinder ////////////////////////////////////////////////////////////////////// #ifndef _D3DKMTINTERFACE_H_INCLUDED_ #define _D3DKMTINTERFACE_H_INCLUDED_ ////////////////////////////////////////////////////////////////////// #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 ////////////////////////////////////////////////////////////////////// typedef ULONG MYNTSTATUS; typedef UINT D3DKMT_HANDLE; typedef UINT D3DDDI_VIDEO_PRESENT_SOURCE_ID; typedef UINT D3DDDI_VIDEO_PRESENT_TARGET_ID; ////////////////////////////////////////////////////////////////////// #define STATUS_NOT_IMPLEMENTED ((MYNTSTATUS)0xC0000002L) ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_OPENADAPTERFROMDEVICENAME { PCWSTR pDeviceName; D3DKMT_HANDLE hAdapter; LUID AdapterLuid; } D3DKMT_OPENADAPTERFROMDEVICENAME; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_OPENADAPTERFROMGDIDISPLAYNAME { WCHAR DeviceName[32]; D3DKMT_HANDLE hAdapter; LUID AdapterLuid; D3DDDI_VIDEO_PRESENT_SOURCE_ID VidPnSourceId; } D3DKMT_OPENADAPTERFROMGDIDISPLAYNAME; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_CLOSEADAPTER { D3DKMT_HANDLE hAdapter; } D3DKMT_CLOSEADAPTER; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYADAPTERINFO { D3DKMT_HANDLE hAdapter; unsigned int Type; void* pPrivateDriverData; unsigned int PrivateDriverDataSize; } D3DKMT_QUERYADAPTERINFO; ////////////////////////////////////////////////////////////////////// typedef enum _D3DKMT_QUERYSTATISTICS_TYPE { D3DKMT_QUERYSTATISTICS_ADAPTER = 0, D3DKMT_QUERYSTATISTICS_PROCESS = 1, D3DKMT_QUERYSTATISTICS_PROCESS_ADAPTER = 2, D3DKMT_QUERYSTATISTICS_SEGMENT = 3, D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT = 4, D3DKMT_QUERYSTATISTICS_NODE = 5, D3DKMT_QUERYSTATISTICS_PROCESS_NODE = 6, D3DKMT_QUERYSTATISTICS_VIDPNSOURCE = 7, D3DKMT_QUERYSTATISTICS_PROCESS_VIDPNSOURCE = 8 } D3DKMT_QUERYSTATISTICS_TYPE; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_VISTA { D3DKMT_QUERYSTATISTICS_TYPE Type; void* pBuffer; unsigned int BufferSize; union { struct { D3DKMT_HANDLE hAdapter; } QueryAdapter; struct { LUID AdapterLuid; HANDLE hProcess; } QueryProcess; } u; } D3DKMT_QUERYSTATISTICS_VISTA; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_STATISTICS_VISTA { DWORD Reserved[1024]; } _D3DKMT_STATISTICS_VISTA; ////////////////////////////////////////////////////////////////////// typedef enum _D3DKMT_QUERYRESULT_PREEMPTION_ATTEMPT_RESULT { D3DKMT_PreemptionAttempt = 0, D3DKMT_PreemptionAttemptSuccess = 1, D3DKMT_PreemptionAttemptMissNoCommand = 2, D3DKMT_PreemptionAttemptMissNotEnabled = 3, D3DKMT_PreemptionAttemptMissNextFence = 4, D3DKMT_PreemptionAttemptMissPagingCommand = 5, D3DKMT_PreemptionAttemptMissSplittedCommand = 6, D3DKMT_PreemptionAttemptMissFenceCommand= 7, D3DKMT_PreemptionAttemptMissRenderPendingFlip = 8, D3DKMT_PreemptionAttemptMissNotMakingProgress = 9, D3DKMT_PreemptionAttemptMissLessPriority = 10, D3DKMT_PreemptionAttemptMissRemainingQuantum = 11, D3DKMT_PreemptionAttemptMissRemainingPreemptionQuantum = 12, D3DKMT_PreemptionAttemptMissAlreadyPreempting = 13, D3DKMT_PreemptionAttemptMissGlobalBlock = 14, D3DKMT_PreemptionAttemptMissAlreadyRunning = 15, D3DKMT_PreemptionAttemptStatisticsMax } D3DKMT_QUERYRESULT_PREEMPTION_ATTEMPT_RESULT; ////////////////////////////////////////////////////////////////////// typedef enum _D3DKMT_QUERYSTATISTICS_DMA_PACKET_TYPE { D3DKMT_ClientRenderBuffer = 0, D3DKMT_ClientPagingBuffer = 1, D3DKMT_SystemPagingBuffer = 2, D3DKMT_SystemPreemptionBuffer = 3, D3DKMT_DmaPacketTypeMax } D3DKMT_QUERYSTATISTICS_DMA_PACKET_TYPE; ////////////////////////////////////////////////////////////////////// typedef enum _D3DKMT_QUERYSTATISTICS_QUEUE_PACKET_TYPE { D3DKMT_RenderCommandBuffer = 0, D3DKMT_DeferredCommandBuffer = 1, D3DKMT_SystemCommandBuffer = 2, D3DKMT_MmIoFlipCommandBuffer = 3, D3DKMT_WaitCommandBuffer = 4, D3DKMT_SignalCommandBuffer = 5, D3DKMT_DeviceCommandBuffer = 6, D3DKMT_SoftwareCommandBuffer = 7, D3DKMT_QueuePacketTypeMax } D3DKMT_QUERYSTATISTICS_QUEUE_PACKET_TYPE; ////////////////////////////////////////////////////////////////////// typedef enum _D3DKMT_QUERYSTATISTICS_ALLOCATION_PRIORITY_CLASS { D3DKMT_AllocationPriorityClassMinimum = 0, D3DKMT_AllocationPriorityClassLow = 1, D3DKMT_AllocationPriorityClassNormal = 2, D3DKMT_AllocationPriorityClassHigh = 3, D3DKMT_AllocationPriorityClassMaximum = 4, D3DKMT_MaxAllocationPriorityClass } D3DKMT_QUERYSTATISTICS_ALLOCATION_PRIORITY_CLASS; ////////////////////////////////////////////////////////////////////// #define D3DKMT_QUERYSTATISTICS_SEGMENT_PREFERENCE_MAX 5 ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_COUNTER { ULONG Count; ULONGLONG Bytes; } D3DKMT_QUERYSTATISTICS_COUNTER; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_DMA_PACKET_TYPE_INFORMATION { ULONG PacketSubmited; ULONG PacketCompleted; ULONG PacketPreempted; ULONG PacketFaulted; } D3DKMT_QUERYSTATISTICS_DMA_PACKET_TYPE_INFORMATION; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_QUEUE_PACKET_TYPE_INFORMATION { ULONG PacketSubmited; ULONG PacketCompleted; } D3DKMT_QUERYSTATISTICS_QUEUE_PACKET_TYPE_INFORMATION; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_PACKET_INFORMATION { D3DKMT_QUERYSTATISTICS_QUEUE_PACKET_TYPE_INFORMATION QueuePacket[D3DKMT_QueuePacketTypeMax]; D3DKMT_QUERYSTATISTICS_DMA_PACKET_TYPE_INFORMATION DmaPacket[D3DKMT_DmaPacketTypeMax]; } D3DKMT_QUERYSTATISTICS_PACKET_INFORMATION; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_PREEMPTION_INFORMATION { ULONG PreemptionCounter[D3DKMT_PreemptionAttemptStatisticsMax]; } D3DKMT_QUERYSTATISTICS_PREEMPTION_INFORMATION; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_PROCESS_NODE_INFORMATION { LARGE_INTEGER RunningTime; // 100ns ULONG ContextSwitch; D3DKMT_QUERYSTATISTICS_PREEMPTION_INFORMATION PreemptionStatistics; D3DKMT_QUERYSTATISTICS_PACKET_INFORMATION PacketStatistics; ULONG64 Reserved[8]; } D3DKMT_QUERYSTATISTICS_PROCESS_NODE_INFORMATION; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_NODE_INFORMATION { D3DKMT_QUERYSTATISTICS_PROCESS_NODE_INFORMATION GlobalInformation; // global D3DKMT_QUERYSTATISTICS_PROCESS_NODE_INFORMATION SystemInformation; // system thread ULONG64 Reserved[8]; } D3DKMT_QUERYSTATISTICS_NODE_INFORMATION; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_PROCESS_VIDPNSOURCE_INFORMATION { ULONG Frame; ULONG CancelledFrame; ULONG QueuedPresent; ULONG64 Reserved[8]; } D3DKMT_QUERYSTATISTICS_PROCESS_VIDPNSOURCE_INFORMATION; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_VIDPNSOURCE_INFORMATION { D3DKMT_QUERYSTATISTICS_PROCESS_VIDPNSOURCE_INFORMATION GlobalInformation; // global D3DKMT_QUERYSTATISTICS_PROCESS_VIDPNSOURCE_INFORMATION SystemInformation; // system thread ULONG64 Reserved[8]; } D3DKMT_QUERYSTATISTICS_VIDPNSOURCE_INFORMATION; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATSTICS_REFERENCE_DMA_BUFFER { ULONG NbCall; ULONG NbAllocationsReferenced; ULONG MaxNbAllocationsReferenced; ULONG NbNULLReference; ULONG NbWriteReference; ULONG NbRenamedAllocationsReferenced; ULONG NbIterationSearchingRenamedAllocation; ULONG NbLockedAllocationReferenced; ULONG NbAllocationWithValidPrepatchingInfoReferenced; ULONG NbAllocationWithInvalidPrepatchingInfoReferenced; ULONG NbDMABufferSuccessfullyPrePatched; ULONG NbPrimariesReferencesOverflow; ULONG NbAllocationWithNonPreferredResources; ULONG NbAllocationInsertedInMigrationTable; } D3DKMT_QUERYSTATSTICS_REFERENCE_DMA_BUFFER; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATSTICS_RENAMING { ULONG NbAllocationsRenamed; ULONG NbAllocationsShrinked; ULONG NbRenamedBuffer; ULONG MaxRenamingListLength; ULONG NbFailuresDueToRenamingLimit; ULONG NbFailuresDueToCreateAllocation; ULONG NbFailuresDueToOpenAllocation; ULONG NbFailuresDueToLowResource; ULONG NbFailuresDueToNonRetiredLimit; } D3DKMT_QUERYSTATSTICS_RENAMING; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATSTICS_PREPRATION { ULONG BroadcastStall; ULONG NbDMAPrepared; ULONG NbDMAPreparedLongPath; ULONG ImmediateHighestPreparationPass; D3DKMT_QUERYSTATISTICS_COUNTER AllocationsTrimmed; } D3DKMT_QUERYSTATSTICS_PREPRATION; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATSTICS_PAGING_FAULT { D3DKMT_QUERYSTATISTICS_COUNTER Faults; D3DKMT_QUERYSTATISTICS_COUNTER FaultsFirstTimeAccess; D3DKMT_QUERYSTATISTICS_COUNTER FaultsReclaimed; D3DKMT_QUERYSTATISTICS_COUNTER FaultsMigration; D3DKMT_QUERYSTATISTICS_COUNTER FaultsIncorrectResource; D3DKMT_QUERYSTATISTICS_COUNTER FaultsLostContent; D3DKMT_QUERYSTATISTICS_COUNTER FaultsEvicted; D3DKMT_QUERYSTATISTICS_COUNTER AllocationsMEM_RESET; D3DKMT_QUERYSTATISTICS_COUNTER AllocationsUnresetSuccess; D3DKMT_QUERYSTATISTICS_COUNTER AllocationsUnresetFail; ULONG AllocationsUnresetSuccessRead; ULONG AllocationsUnresetFailRead; D3DKMT_QUERYSTATISTICS_COUNTER Evictions; D3DKMT_QUERYSTATISTICS_COUNTER EvictionsDueToPreparation; D3DKMT_QUERYSTATISTICS_COUNTER EvictionsDueToLock; D3DKMT_QUERYSTATISTICS_COUNTER EvictionsDueToClose; D3DKMT_QUERYSTATISTICS_COUNTER EvictionsDueToPurge; D3DKMT_QUERYSTATISTICS_COUNTER EvictionsDueToSuspendCPUAccess; } D3DKMT_QUERYSTATSTICS_PAGING_FAULT; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATSTICS_PAGING_TRANSFER { ULONGLONG BytesFilled; ULONGLONG BytesDiscarded; ULONGLONG BytesMappedIntoAperture; ULONGLONG BytesUnmappedFromAperture; ULONGLONG BytesTransferredFromMdlToMemory; ULONGLONG BytesTransferredFromMemoryToMdl; ULONGLONG BytesTransferredFromApertureToMemory; ULONGLONG BytesTransferredFromMemoryToAperture; } D3DKMT_QUERYSTATSTICS_PAGING_TRANSFER; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATSTICS_SWIZZLING_RANGE { ULONG NbRangesAcquired; ULONG NbRangesReleased; } D3DKMT_QUERYSTATSTICS_SWIZZLING_RANGE; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATSTICS_LOCKS { ULONG NbLocks; ULONG NbLocksWaitFlag; ULONG NbLocksDiscardFlag; ULONG NbLocksNoOverwrite; ULONG NbLocksNoReadSync; ULONG NbLocksLinearization; ULONG NbComplexLocks; } D3DKMT_QUERYSTATSTICS_LOCKS; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATSTICS_ALLOCATIONS { D3DKMT_QUERYSTATISTICS_COUNTER Created; D3DKMT_QUERYSTATISTICS_COUNTER Destroyed; D3DKMT_QUERYSTATISTICS_COUNTER Opened; D3DKMT_QUERYSTATISTICS_COUNTER Closed; D3DKMT_QUERYSTATISTICS_COUNTER MigratedSuccess; D3DKMT_QUERYSTATISTICS_COUNTER MigratedFail; D3DKMT_QUERYSTATISTICS_COUNTER MigratedAbandoned; } D3DKMT_QUERYSTATSTICS_ALLOCATIONS; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATSTICS_TERMINATIONS { D3DKMT_QUERYSTATISTICS_COUNTER TerminatedShared; D3DKMT_QUERYSTATISTICS_COUNTER TerminatedNonShared; D3DKMT_QUERYSTATISTICS_COUNTER DestroyedShared; D3DKMT_QUERYSTATISTICS_COUNTER DestroyedNonShared; } D3DKMT_QUERYSTATSTICS_TERMINATIONS; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_ADAPTER_INFORMATION { ULONG NbSegments; ULONG NodeCount; ULONG VidPnSourceCount; ULONG VSyncEnabled; ULONG TdrDetectedCount; LONGLONG ZeroLengthDmaBuffers; ULONGLONG RestartedPeriod; D3DKMT_QUERYSTATSTICS_REFERENCE_DMA_BUFFER ReferenceDmaBuffer; D3DKMT_QUERYSTATSTICS_RENAMING Renaming; D3DKMT_QUERYSTATSTICS_PREPRATION Preparation; D3DKMT_QUERYSTATSTICS_PAGING_FAULT PagingFault; D3DKMT_QUERYSTATSTICS_PAGING_TRANSFER PagingTransfer; D3DKMT_QUERYSTATSTICS_SWIZZLING_RANGE SwizzlingRange; D3DKMT_QUERYSTATSTICS_LOCKS Locks; D3DKMT_QUERYSTATSTICS_ALLOCATIONS Allocations; D3DKMT_QUERYSTATSTICS_TERMINATIONS Terminations; ULONG64 Reserved[8]; } D3DKMT_QUERYSTATISTICS_ADAPTER_INFORMATION; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_SYSTEM_MEMORY { ULONGLONG BytesAllocated; ULONGLONG BytesReserved; ULONG SmallAllocationBlocks; ULONG LargeAllocationBlocks; ULONGLONG WriteCombinedBytesAllocated; ULONGLONG WriteCombinedBytesReserved; ULONGLONG CachedBytesAllocated; ULONGLONG CachedBytesReserved; ULONGLONG SectionBytesAllocated; ULONGLONG SectionBytesReserved; } D3DKMT_QUERYSTATISTICS_SYSTEM_MEMORY; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_PROCESS_INFORMATION { ULONG NodeCount; ULONG VidPnSourceCount; D3DKMT_QUERYSTATISTICS_SYSTEM_MEMORY SystemMemory; ULONG64 Reserved[8]; } D3DKMT_QUERYSTATISTICS_PROCESS_INFORMATION; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_DMA_BUFFER { D3DKMT_QUERYSTATISTICS_COUNTER Size; ULONG AllocationListBytes; ULONG PatchLocationListBytes; } D3DKMT_QUERYSTATISTICS_DMA_BUFFER; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_COMMITMENT_DATA { ULONG64 TotalBytesEvictedFromProcess; ULONG64 BytesBySegmentPreference[D3DKMT_QUERYSTATISTICS_SEGMENT_PREFERENCE_MAX]; } D3DKMT_QUERYSTATISTICS_COMMITMENT_DATA; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_POLICY { ULONGLONG PreferApertureForRead[D3DKMT_MaxAllocationPriorityClass]; ULONGLONG PreferAperture[D3DKMT_MaxAllocationPriorityClass]; ULONGLONG MemResetOnPaging; ULONGLONG RemovePagesFromWorkingSetOnPaging; ULONGLONG MigrationEnabled; } D3DKMT_QUERYSTATISTICS_POLICY; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_PROCESS_ADAPTER_INFORMATION { ULONG NbSegments; ULONG NodeCount; ULONG VidPnSourceCount; ULONG VirtualMemoryUsage; D3DKMT_QUERYSTATISTICS_DMA_BUFFER DmaBuffer; D3DKMT_QUERYSTATISTICS_COMMITMENT_DATA CommitmentData; D3DKMT_QUERYSTATISTICS_POLICY _Policy; ULONG64 Reserved[8]; } D3DKMT_QUERYSTATISTICS_PROCESS_ADAPTER_INFORMATION; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_MEMORY { ULONGLONG TotalBytesEvicted; ULONG AllocsCommitted; ULONG AllocsResident; } D3DKMT_QUERYSTATISTICS_MEMORY; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_SEGMENT_INFORMATION_V1 { ULONG CommitLimit; ULONG BytesCommitted; ULONG BytesResident; D3DKMT_QUERYSTATISTICS_MEMORY Memory; ULONG Aperture; // boolean ULONGLONG TotalBytesEvictedByPriority[D3DKMT_MaxAllocationPriorityClass]; ULONG64 SystemMemoryEndAddress; struct { ULONG64 PreservedDuringStandby : 1; ULONG64 PreservedDuringHibernate : 1; ULONG64 PartiallyPreservedDuringHibernate : 1; ULONG64 Reserved : 61; } PowerFlags; ULONG64 Reserved[7]; } D3DKMT_QUERYSTATISTICS_SEGMENT_INFORMATION_V1; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_SEGMENT_INFORMATION { ULONGLONG CommitLimit; ULONGLONG BytesCommitted; ULONGLONG BytesResident; D3DKMT_QUERYSTATISTICS_MEMORY Memory; ULONG Aperture; // boolean ULONGLONG TotalBytesEvictedByPriority[D3DKMT_MaxAllocationPriorityClass]; ULONG64 SystemMemoryEndAddress; struct { ULONG64 PreservedDuringStandby : 1; ULONG64 PreservedDuringHibernate : 1; ULONG64 PartiallyPreservedDuringHibernate : 1; ULONG64 Reserved : 61; } PowerFlags; ULONG64 Reserved[6]; } D3DKMT_QUERYSTATISTICS_SEGMENT_INFORMATION; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_VIDEO_MEMORY { ULONG AllocsCommitted; D3DKMT_QUERYSTATISTICS_COUNTER AllocsResidentInP[D3DKMT_QUERYSTATISTICS_SEGMENT_PREFERENCE_MAX]; D3DKMT_QUERYSTATISTICS_COUNTER AllocsResidentInNonPreferred; ULONGLONG TotalBytesEvictedDueToPreparation; } D3DKMT_QUERYSTATISTICS_VIDEO_MEMORY; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_POLICY { ULONGLONG UseMRU; } D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_POLICY; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_INFORMATION { ULONGLONG BytesCommitted; ULONGLONG MaximumWorkingSet; ULONGLONG MinimumWorkingSet; ULONG NbReferencedAllocationEvictedInPeriod; D3DKMT_QUERYSTATISTICS_VIDEO_MEMORY VideoMemory; D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_POLICY _Policy; ULONG64 Reserved[8]; } D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_INFORMATION; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_QUERY_SEGMENT { ULONG SegmentId; } D3DKMT_QUERYSTATISTICS_QUERY_SEGMENT; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_QUERY_NODE { ULONG NodeId; } D3DKMT_QUERYSTATISTICS_QUERY_NODE; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS_QUERY_VIDPNSOURCE { ULONG VidPnSourceId; } D3DKMT_QUERYSTATISTICS_QUERY_VIDPNSOURCE; ////////////////////////////////////////////////////////////////////// typedef union _D3DKMT_QUERYSTATISTICS_RESULT { D3DKMT_QUERYSTATISTICS_ADAPTER_INFORMATION AdapterInformation; D3DKMT_QUERYSTATISTICS_SEGMENT_INFORMATION_V1 SegmentInformationV1; // WIN7 D3DKMT_QUERYSTATISTICS_SEGMENT_INFORMATION SegmentInformation; // WIN8 D3DKMT_QUERYSTATISTICS_NODE_INFORMATION NodeInformation; D3DKMT_QUERYSTATISTICS_VIDPNSOURCE_INFORMATION VidPnSourceInformation; D3DKMT_QUERYSTATISTICS_PROCESS_INFORMATION ProcessInformation; D3DKMT_QUERYSTATISTICS_PROCESS_ADAPTER_INFORMATION ProcessAdapterInformation; D3DKMT_QUERYSTATISTICS_PROCESS_SEGMENT_INFORMATION ProcessSegmentInformation; D3DKMT_QUERYSTATISTICS_PROCESS_NODE_INFORMATION ProcessNodeInformation; D3DKMT_QUERYSTATISTICS_PROCESS_VIDPNSOURCE_INFORMATION ProcessVidPnSourceInformation; } D3DKMT_QUERYSTATISTICS_RESULT; ////////////////////////////////////////////////////////////////////// typedef struct _D3DKMT_QUERYSTATISTICS { D3DKMT_QUERYSTATISTICS_TYPE Type; LUID AdapterLuid; HANDLE hProcess; D3DKMT_QUERYSTATISTICS_RESULT QueryResult; union { D3DKMT_QUERYSTATISTICS_QUERY_SEGMENT QuerySegment; D3DKMT_QUERYSTATISTICS_QUERY_SEGMENT QueryProcessSegment; D3DKMT_QUERYSTATISTICS_QUERY_NODE QueryNode; D3DKMT_QUERYSTATISTICS_QUERY_NODE QueryProcessNode; D3DKMT_QUERYSTATISTICS_QUERY_VIDPNSOURCE QueryVidPnSource; D3DKMT_QUERYSTATISTICS_QUERY_VIDPNSOURCE QueryProcessVidPnSource; }; } D3DKMT_QUERYSTATISTICS; ////////////////////////////////////////////////////////////////////// typedef MYNTSTATUS (APIENTRY *D3DKMTOPENADAPTERFROMDEVICENAME)(D3DKMT_OPENADAPTERFROMDEVICENAME*); typedef MYNTSTATUS (APIENTRY *D3DKMTOPENADAPTERFROMGDIDISPLAYNAME)(D3DKMT_OPENADAPTERFROMGDIDISPLAYNAME*); typedef MYNTSTATUS (APIENTRY *D3DKMTCLOSEADAPTER)(D3DKMT_CLOSEADAPTER*); typedef MYNTSTATUS (APIENTRY *D3DKMTQUERYSTATISTICS)(LPVOID); ////////////////////////////////////////////////////////////////////// class CD3DKMTInterface { public: MYNTSTATUS D3DKMTOpenAdapterFromDeviceName(D3DKMT_OPENADAPTERFROMDEVICENAME* pData); MYNTSTATUS D3DKMTOpenAdapterFromGdiDisplayName(D3DKMT_OPENADAPTERFROMGDIDISPLAYNAME* pData); MYNTSTATUS D3DKMTCloseAdapter(D3DKMT_CLOSEADAPTER* pData); MYNTSTATUS D3DKMTQueryStatistics(LPVOID pData); BOOL Init(); void Uninit(); CD3DKMTInterface(); virtual ~CD3DKMTInterface(); protected: HINSTANCE m_hGDI32_DLL; D3DKMTOPENADAPTERFROMDEVICENAME m_pD3DKMTOpenAdapterFromDeviceName; D3DKMTOPENADAPTERFROMGDIDISPLAYNAME m_pD3DKMTOpenAdapterFromGdiDisplayName; D3DKMTCLOSEADAPTER m_pD3DKMTCloseAdapter; D3DKMTQUERYSTATISTICS m_pD3DKMTQueryStatistics; }; ////////////////////////////////////////////////////////////////////// #endif //////////////////////////////////////////////////////////////////////