Revision control
Copy as Markdown
Other Tools
// Licensed under the Apache License, Version 2.0
// All files in the project carrying such notice may not be copied, modified, or distributed
// except according to those terms.
use ctypes::c_void;
use shared::basetsd::{UINT64, UINT8};
use shared::dxgiformat::DXGI_FORMAT;
use shared::dxgitype::{DXGI_COLOR_SPACE_TYPE, DXGI_RATIONAL};
use shared::guiddef::{GUID, REFIID};
use shared::minwindef::{BOOL, BYTE, DWORD, FLOAT, INT, UINT};
use um::d3d11::{
D3D11_BLEND, D3D11_BLEND_OP, D3D11_BOX, D3D11_CULL_MODE, D3D11_FILL_MODE, D3D11_RECT,
D3D11_VIDEO_DECODER_BUFFER_TYPE, D3D11_VIDEO_DECODER_CONFIG, D3D11_VIDEO_DECODER_DESC,
ID3D11BlendState, ID3D11BlendStateVtbl, ID3D11Buffer, ID3D11CryptoSession, ID3D11Device,
ID3D11DeviceChild, ID3D11DeviceChildVtbl, ID3D11DeviceContext, ID3D11DeviceContextVtbl,
ID3D11DeviceVtbl, ID3D11RasterizerState, ID3D11RasterizerStateVtbl, ID3D11Resource,
ID3D11VideoContext, ID3D11VideoContextVtbl, ID3D11VideoDecoder, ID3D11VideoDevice,
ID3D11VideoDeviceVtbl, ID3D11VideoProcessor, ID3D11VideoProcessorEnumerator,
ID3D11VideoProcessorEnumeratorVtbl, ID3D11View
};
use um::d3dcommon::D3D_FEATURE_LEVEL;
use um::unknwnbase::{IUnknown, IUnknownVtbl};
use um::winnt::{HANDLE, HRESULT, LPCWSTR};
DEFINE_GUID!{IID_ID3D11BlendState1,
0xcc86fabe, 0xda55, 0x401d, 0x85, 0xe7, 0xe3, 0xc9, 0xde, 0x28, 0x77, 0xe9}
DEFINE_GUID!{IID_ID3D11RasterizerState1,
0x1217d7a6, 0x5039, 0x418c, 0xb0, 0x42, 0x9c, 0xbe, 0x25, 0x6a, 0xfd, 0x6e}
DEFINE_GUID!{IID_ID3DDeviceContextState,
0x5c1e0d8a, 0x7c23, 0x48f9, 0x8c, 0x59, 0xa9, 0x29, 0x58, 0xce, 0xff, 0x11}
DEFINE_GUID!{IID_ID3D11DeviceContext1,
0xbb2c6faa, 0xb5fb, 0x4082, 0x8e, 0x6b, 0x38, 0x8b, 0x8c, 0xfa, 0x90, 0xe1}
DEFINE_GUID!{IID_ID3D11VideoContext1,
0xa7f026da, 0xa5f8, 0x4487, 0xa5, 0x64, 0x15, 0xe3, 0x43, 0x57, 0x65, 0x1e}
DEFINE_GUID!{IID_ID3D11VideoDevice1,
0x29da1d51, 0x1321, 0x4454, 0x80, 0x4b, 0xf5, 0xfc, 0x9f, 0x86, 0x1f, 0x0f}
DEFINE_GUID!{IID_ID3D11VideoProcessorEnumerator1,
0x465217f2, 0x5568, 0x43cf, 0xb5, 0xb9, 0xf6, 0x1d, 0x54, 0x53, 0x1c, 0xa1}
DEFINE_GUID!{IID_ID3D11Device1,
0xa04bfb29, 0x08ef, 0x43d6, 0xa4, 0x9c, 0xa9, 0xbd, 0xbd, 0xcb, 0xe6, 0x86}
DEFINE_GUID!{IID_ID3DUserDefinedAnnotation,
0xb2daad8b, 0x03d4, 0x4dbf, 0x95, 0xeb, 0x32, 0xab, 0x4b, 0x63, 0xd0, 0xab}
ENUM!{enum D3D11_COPY_FLAGS {
D3D11_COPY_NO_OVERWRITE = 0x00000001,
D3D11_COPY_DISCARD = 0x00000002,
}}
ENUM!{enum D3D11_LOGIC_OP {
D3D11_LOGIC_OP_CLEAR = 0,
D3D11_LOGIC_OP_SET = 1,
D3D11_LOGIC_OP_COPY = 2,
D3D11_LOGIC_OP_COPY_INVERTED = 3,
D3D11_LOGIC_OP_NOOP = 4,
D3D11_LOGIC_OP_INVERT = 5,
D3D11_LOGIC_OP_AND = 6,
D3D11_LOGIC_OP_NAND = 7,
D3D11_LOGIC_OP_OR = 8,
D3D11_LOGIC_OP_NOR = 9,
D3D11_LOGIC_OP_XOR = 10,
D3D11_LOGIC_OP_EQUIV = 11,
D3D11_LOGIC_OP_AND_REVERSE = 12,
D3D11_LOGIC_OP_AND_INVERTED = 13,
D3D11_LOGIC_OP_OR_REVERSE = 14,
D3D11_LOGIC_OP_OR_INVERTED = 15,
}}
STRUCT!{struct D3D11_RENDER_TARGET_BLEND_DESC1 {
BlendEnable: BOOL,
LogicOpEnable: BOOL,
SrcBlend: D3D11_BLEND,
DestBlend: D3D11_BLEND,
BlendOp: D3D11_BLEND_OP,
SrcBlendAlpha: D3D11_BLEND,
DestBlendAlpha: D3D11_BLEND,
BlendOpAlpha: D3D11_BLEND_OP,
LogicOp: D3D11_LOGIC_OP,
RenderTargetWriteMask: UINT8,
}}
STRUCT!{struct D3D11_BLEND_DESC1 {
AlphaToCoverageEnable: BOOL,
IndependentBlendEnable: BOOL,
RenderTarget: [D3D11_RENDER_TARGET_BLEND_DESC1; 8],
}}
RIDL!{#[uuid(0xcc86fabe, 0xda55, 0x401d, 0x85, 0xe7, 0xe3, 0xc9, 0xde, 0x28, 0x77, 0xe9)]
interface ID3D11BlendState1(ID3D11BlendState1Vtbl): ID3D11BlendState(ID3D11BlendStateVtbl) {
fn GetDesc1(
pDesc: *mut D3D11_BLEND_DESC1,
) -> (),
}}
STRUCT!{struct D3D11_RASTERIZER_DESC1 {
FillMode: D3D11_FILL_MODE,
CullMode: D3D11_CULL_MODE,
FrontCounterClockwise: BOOL,
DepthBias: INT,
DepthBiasClamp: FLOAT,
SlopeScaledDepthBias: FLOAT,
DepthClipEnable: BOOL,
ScissorEnable: BOOL,
MultisampleEnable: BOOL,
AntialiasedLineEnable: BOOL,
ForcedSampleCount: UINT,
}}
RIDL!{#[uuid(0x1217d7a6, 0x5039, 0x418c, 0xb0, 0x42, 0x9c, 0xbe, 0x25, 0x6a, 0xfd, 0x6e)]
interface ID3D11RasterizerState1(ID3D11RasterizerState1Vtbl):
ID3D11RasterizerState(ID3D11RasterizerStateVtbl) {
fn GetDesc1(
pDesc: *mut D3D11_RASTERIZER_DESC1,
) -> (),
}}
ENUM!{enum D3D11_1_CREATE_DEVICE_CONTEXT_STATE_FLAG {
D3D11_1_CREATE_DEVICE_CONTEXT_STATE_SINGLETHREADED = 0x1,
}}
RIDL!{#[uuid(0x5c1e0d8a, 0x7c23, 0x48f9, 0x8c, 0x59, 0xa9, 0x29, 0x58, 0xce, 0xff, 0x11)]
interface ID3DDeviceContextState(ID3DDeviceContextStateVtbl):
ID3D11DeviceChild(ID3D11DeviceChildVtbl) {}}
RIDL!{#[uuid(0xbb2c6faa, 0xb5fb, 0x4082, 0x8e, 0x6b, 0x38, 0x8b, 0x8c, 0xfa, 0x90, 0xe1)]
interface ID3D11DeviceContext1(ID3D11DeviceContext1Vtbl):
ID3D11DeviceContext(ID3D11DeviceContextVtbl) {
fn CopySubresourceRegion1(
pDstResource: *mut ID3D11Resource,
DstSubresource: UINT,
DstX: UINT,
DstY: UINT,
DstZ: UINT,
pSrcResource: *mut ID3D11Resource,
SrcSubresource: UINT,
pSrcBox: *const D3D11_BOX,
CopyFlags: UINT,
) -> (),
fn UpdateSubresource1(
pDstResource: *mut ID3D11Resource,
DstSubresource: UINT,
pDstBox: *const D3D11_BOX,
pSrcData: *mut c_void,
SrcRowPitch: UINT,
SrcDepthPitch: UINT,
CopyFlags: UINT,
) -> (),
fn DiscardResource(
pResource: *mut ID3D11Resource,
) -> (),
fn DiscardView(
pResource: *mut ID3D11Resource,
) -> (),
fn VSSetConstantBuffers1(
StartSlot: UINT,
NumBuffers: UINT,
ppConstantBuffers: *const *mut ID3D11Buffer,
pFirstConstant: *const UINT,
pNumConstants: *const UINT,
) -> (),
fn HSSetConstantBuffers1(
StartSlot: UINT,
NumBuffers: UINT,
ppConstantBuffers: *const *mut ID3D11Buffer,
pFirstConstant: *const UINT,
pNumConstants: *const UINT,
) -> (),
fn DSSetConstantBuffers1(
StartSlot: UINT,
NumBuffers: UINT,
ppConstantBuffers: *const *mut ID3D11Buffer,
pFirstConstant: *const UINT,
pNumConstants: *const UINT,
) -> (),
fn GSSetConstantBuffers1(
StartSlot: UINT,
NumBuffers: UINT,
ppConstantBuffers: *const *mut ID3D11Buffer,
pFirstConstant: *const UINT,
pNumConstants: *const UINT,
) -> (),
fn PSSetConstantBuffers1(
StartSlot: UINT,
NumBuffers: UINT,
ppConstantBuffers: *const *mut ID3D11Buffer,
pFirstConstant: *const UINT,
pNumConstants: *const UINT,
) -> (),
fn CSSetConstantBuffers1(
StartSlot: UINT,
NumBuffers: UINT,
ppConstantBuffers: *const *mut ID3D11Buffer,
pFirstConstant: *const UINT,
pNumConstants: *const UINT,
) -> (),
fn VSGetConstantBuffers1(
StartSlot: UINT,
NumBuffers: UINT,
ppConstantBuffers: *mut *mut ID3D11Buffer,
pFirstConstant: *mut UINT,
pNumConstants: *mut UINT,
) -> (),
fn HSGetConstantBuffers1(
StartSlot: UINT,
NumBuffers: UINT,
ppConstantBuffers: *mut *mut ID3D11Buffer,
pFirstConstant: *mut UINT,
pNumConstants: *mut UINT,
) -> (),
fn DSGetConstantBuffers1(
StartSlot: UINT,
NumBuffers: UINT,
ppConstantBuffers: *mut *mut ID3D11Buffer,
pFirstConstant: *mut UINT,
pNumConstants: *mut UINT,
) -> (),
fn GSGetConstantBuffers1(
StartSlot: UINT,
NumBuffers: UINT,
ppConstantBuffers: *mut *mut ID3D11Buffer,
pFirstConstant: *mut UINT,
pNumConstants: *mut UINT,
) -> (),
fn PSGetConstantBuffers1(
StartSlot: UINT,
NumBuffers: UINT,
ppConstantBuffers: *mut *mut ID3D11Buffer,
pFirstConstant: *mut UINT,
pNumConstants: *mut UINT,
) -> (),
fn CSGetConstantBuffers1(
StartSlot: UINT,
NumBuffers: UINT,
ppConstantBuffers: *mut *mut ID3D11Buffer,
pFirstConstant: *mut UINT,
pNumConstants: *mut UINT,
) -> (),
fn SwapDeviceContextState(
pState: *mut ID3DDeviceContextState,
ppPreviousState: *mut *mut ID3DDeviceContextState,
) -> (),
fn ClearView(
pView: *mut ID3D11View,
Color: [FLOAT; 4],
pRect: *const D3D11_RECT,
NumRects: UINT,
) -> (),
fn DiscardView1(
pResourceView: *mut ID3D11View,
pRects: *const D3D11_RECT,
NumRects: UINT,
) -> (),
}}
STRUCT!{struct D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK {
ClearSize: UINT,
EncryptedSize: UINT,
}}
STRUCT!{struct D3D11_VIDEO_DECODER_BUFFER_DESC1 {
BufferType: D3D11_VIDEO_DECODER_BUFFER_TYPE,
DataOffset: UINT,
DataSize: UINT,
pIV: *mut c_void,
IVSize: UINT,
pSubSampleMappingBlock: *mut D3D11_VIDEO_DECODER_SUB_SAMPLE_MAPPING_BLOCK,
SubSampleMappingCount: UINT,
}}
STRUCT!{struct D3D11_VIDEO_DECODER_BEGIN_FRAME_CRYPTO_SESSION {
pCryptoSession: *mut ID3D11CryptoSession,
BlobSize: UINT,
pBlob: *mut c_void,
pKeyInfoId: *mut GUID,
PrivateDataSize: UINT,
pPrivateData: *mut c_void,
}}
ENUM!{enum D3D11_VIDEO_DECODER_CAPS {
D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE = 0x1,
D3D11_VIDEO_DECODER_CAPS_NON_REAL_TIME = 0x02,
D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE_DYNAMIC = 0x04,
D3D11_VIDEO_DECODER_CAPS_DOWNSAMPLE_REQUIRED = 0x08,
D3D11_VIDEO_DECODER_CAPS_UNSUPPORTED = 0x10,
}}
ENUM!{enum D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINTS {
D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_MULTIPLANE_OVERLAY_ROTATION = 0x01,
D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_MULTIPLANE_OVERLAY_RESIZE = 0x02,
D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_MULTIPLANE_OVERLAY_COLOR_SPACE_CONVERSION = 0x04,
D3D11_VIDEO_PROCESSOR_BEHAVIOR_HINT_TRIPLE_BUFFER_OUTPUT = 0x08,
}}
STRUCT!{struct D3D11_VIDEO_PROCESSOR_STREAM_BEHAVIOR_HINT {
Enable: BOOL,
Width: UINT,
Height: UINT,
Format: DXGI_FORMAT,
}}
ENUM!{enum D3D11_CRYPTO_SESSION_STATUS {
D3D11_CRYPTO_SESSION_STATUS_OK = 0,
D3D11_CRYPTO_SESSION_STATUS_KEY_LOST = 1,
D3D11_CRYPTO_SESSION_STATUS_KEY_AND_CONTENT_LOST = 2,
}}
STRUCT!{struct D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA {
PrivateDataSize: UINT,
HWProtectionDataSize: UINT,
pbInput: [BYTE; 4],
}}
STRUCT!{struct D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA {
PrivateDataSize: UINT,
MaxHWProtectionDataSize: UINT,
HWProtectionDataSize: UINT,
TransportTime: UINT64,
ExecutionTime: UINT64,
pbOutput: [BYTE; 4],
}}
STRUCT!{struct D3D11_KEY_EXCHANGE_HW_PROTECTION_DATA {
HWProtectionFunctionID: UINT,
pInputData: *mut D3D11_KEY_EXCHANGE_HW_PROTECTION_INPUT_DATA,
pOutputData: *mut D3D11_KEY_EXCHANGE_HW_PROTECTION_OUTPUT_DATA,
Status: HRESULT,
}}
STRUCT!{struct D3D11_VIDEO_SAMPLE_DESC {
Width: UINT,
Height: UINT,
Format: DXGI_FORMAT,
ColorSpace: DXGI_COLOR_SPACE_TYPE,
}}
RIDL!{#[uuid(0xa7f026da, 0xa5f8, 0x4487, 0xa5, 0x64, 0x15, 0xe3, 0x43, 0x57, 0x65, 0x1e)]
interface ID3D11VideoContext1(ID3D11VideoContext1Vtbl):
ID3D11VideoContext(ID3D11VideoContextVtbl) {
fn SubmitDecoderBuffers1(
pDecoder: *mut ID3D11VideoDecoder,
NumBuffers: UINT,
pBufferDesc: *const D3D11_VIDEO_DECODER_BUFFER_DESC1,
) -> HRESULT,
fn GetDataForNewHardwareKey(
pCryptoSession: *mut ID3D11CryptoSession,
PrivateInputSize: UINT,
pPrivateInputData: *const c_void,
pPrivateOutputData: *mut UINT64,
) -> HRESULT,
fn CheckCryptoSessionStatus(
pCryptoSession: *mut ID3D11CryptoSession,
pStatus: *mut D3D11_CRYPTO_SESSION_STATUS,
) -> HRESULT,
fn DecoderEnableDownsampling(
pDecoder: *mut ID3D11VideoDecoder,
InputColorSpace: DXGI_COLOR_SPACE_TYPE,
pOutputDesc: *const D3D11_VIDEO_SAMPLE_DESC,
ReferenceFrameCount: UINT,
) -> HRESULT,
fn DecoderUpdateDownsampling(
pDecoder: *mut ID3D11VideoDecoder,
pOutputDesc: *const D3D11_VIDEO_SAMPLE_DESC,
) -> HRESULT,
fn VideoProcessorSetOutputColorSpace1(
pVideoProcessor: *mut ID3D11VideoProcessor,
ColorSpace: DXGI_COLOR_SPACE_TYPE,
) -> (),
fn VideoProcessorSetOutputShaderUsage(
pVideoProcessor: *mut ID3D11VideoProcessor,
ShaderUsage: BOOL,
) -> (),
fn VideoProcessorGetOutputColorSpace1(
pVideoProcessor: *mut ID3D11VideoProcessor,
pColorSpace: *mut DXGI_COLOR_SPACE_TYPE,
) -> (),
fn VideoProcessorGetOutputShaderUsage(
pVideoProcessor: *mut ID3D11VideoProcessor,
pShaderUsage: *mut BOOL,
) -> (),
fn VideoProcessorSetStreamColorSpace1(
pVideoProcessor: *mut ID3D11VideoProcessor,
StreamIndex: UINT,
ColorSpace: DXGI_COLOR_SPACE_TYPE,
) -> (),
fn VideoProcessorSetStreamMirror(
pVideoProcessor: *mut ID3D11VideoProcessor,
StreamIndex: UINT,
Enable: BOOL,
FlipHorizontal: BOOL,
FlipVertical: BOOL,
) -> (),
fn VideoProcessorGetStreamColorSpace1(
pVideoProcessor: *mut ID3D11VideoProcessor,
StreamIndex: UINT,
pColorSpace: *mut DXGI_COLOR_SPACE_TYPE,
) -> (),
fn VideoProcessorGetStreamMirror(
pVideoProcessor: *mut ID3D11VideoProcessor,
StreamIndex: UINT,
pEnable: *mut BOOL,
pFlipHorizontal: *mut BOOL,
pFlipVertical: *mut BOOL,
) -> (),
fn VideoProcessorGetBehaviorHints(
pVideoProcessor: *mut ID3D11VideoProcessor,
OutputWidth: UINT,
OutputHeight: UINT,
OutputFormat: DXGI_FORMAT,
StreamCount: UINT,
pStreams: *const D3D11_VIDEO_PROCESSOR_STREAM_BEHAVIOR_HINT,
pBehaviorHints: *mut UINT,
) -> (),
}}
RIDL!{#[uuid(0x29da1d51, 0x1321, 0x4454, 0x80, 0x4b, 0xf5, 0xfc, 0x9f, 0x86, 0x1f, 0x0f)]
interface ID3D11VideoDevice1(ID3D11VideoDevice1Vtbl): ID3D11VideoDevice(ID3D11VideoDeviceVtbl) {
fn GetCryptoSessionPrivateDataSize(
pCryptoType: *const GUID,
pDecoderProfile: *const GUID,
pKeyExchangeType: *const GUID,
pPrivateInputSize: *mut UINT,
pPrivateOutputSize: *mut UINT,
) -> HRESULT,
fn GetVideoDecoderCaps(
pDecoderProfile: *const GUID,
SampleWidth: UINT,
SampleHeight: UINT,
pFrameRate: *const DXGI_RATIONAL,
BitRate: UINT,
pCryptoType: *const GUID,
pDecoderCaps: *mut UINT,
) -> HRESULT,
fn CheckVideoDecoderDownsampling(
pInputDesc: *const D3D11_VIDEO_DECODER_DESC,
InputColorSpace: DXGI_COLOR_SPACE_TYPE,
pInputConfig: *const D3D11_VIDEO_DECODER_CONFIG,
pFrameRate: *const DXGI_RATIONAL,
pOutputDesc: *const D3D11_VIDEO_SAMPLE_DESC,
pSupported: *mut BOOL,
pRealTimeHint: *mut BOOL,
) -> HRESULT,
fn RecommendVideoDecoderDownsampleParameters(
pInputDesc: *const D3D11_VIDEO_DECODER_DESC,
InputColorSpace: DXGI_COLOR_SPACE_TYPE,
pInputConfig: *const D3D11_VIDEO_DECODER_CONFIG,
pRecommendedOutputDesc: *mut D3D11_VIDEO_SAMPLE_DESC,
) -> HRESULT,
}}
RIDL!{#[uuid(0x465217f2, 0x5568, 0x43cf, 0xb5, 0xb9, 0xf6, 0x1d, 0x54, 0x53, 0x1c, 0xa1)]
interface ID3D11VideoProcessorEnumerator1(ID3D11VideoProcessorEnumerator1Vtbl):
ID3D11VideoProcessorEnumerator(ID3D11VideoProcessorEnumeratorVtbl) {
fn CheckVideoProcessorFormatConversion(
InputFormat: DXGI_FORMAT,
InputCOlorSpace: DXGI_COLOR_SPACE_TYPE,
OutputFormat: DXGI_FORMAT,
OutputColorSpace: DXGI_COLOR_SPACE_TYPE,
pSupported: *mut BOOL,
) -> HRESULT,
}}
RIDL!{#[uuid(0xa04bfb29, 0x08ef, 0x43d6, 0xa4, 0x9c, 0xa9, 0xbd, 0xbd, 0xcb, 0xe6, 0x86)]
interface ID3D11Device1(ID3D11Device1Vtbl): ID3D11Device(ID3D11DeviceVtbl) {
fn GetImmediateContext1(
ppImmediateContext: *mut *mut ID3D11DeviceContext1,
) -> (),
fn CreateDeferredContext1(
ContextFlags: UINT,
ppDeferredContext: *mut *mut ID3D11DeviceContext1,
) -> HRESULT,
fn CreateBlendState(
pBlendStateDesc: *const D3D11_BLEND_DESC1,
ppBlendState: *mut *mut ID3D11BlendState1,
) -> HRESULT,
fn CreateRasterizerState(
pRasterizerDesc: *const D3D11_RASTERIZER_DESC1,
ppRasterizerState: *mut *mut ID3D11RasterizerState1,
) -> HRESULT,
fn CreateDeviceContextState(
Flags: UINT,
pFeatureLevels: *const D3D_FEATURE_LEVEL,
FeatureLevels: UINT,
SDKVersion: UINT,
EmulatedInterface: REFIID,
pChosenFeatureLevel: *mut D3D_FEATURE_LEVEL,
ppContextState: *mut *mut ID3DDeviceContextState,
) -> HRESULT,
fn OpenSharedResource1(
hResource: HANDLE,
returnedInterface: REFIID,
ppResource: *mut *mut c_void,
) -> HRESULT,
fn OpenSharedResourceByName(
Name: LPCWSTR,
dwDesiredAccess: DWORD,
returnedInterface: REFIID,
ppResource: *mut *mut c_void,
) -> HRESULT,
}}
RIDL!{#[uuid(0xb2daad8b, 0x03d4, 0x4dbf, 0x95, 0xeb, 0x32, 0xab, 0x4b, 0x63, 0xd0, 0xab)]
interface ID3DUserDefinedAnnotation(ID3DUserDefinedAnnotationVtbl): IUnknown(IUnknownVtbl) {
fn BeginEvent(
Name: LPCWSTR,
) -> INT,
fn EndEvent() -> INT,
fn SetMarker(
Name: LPCWSTR,
) -> (),
fn GetStatus() -> BOOL,
}}