//! NOTE: this file is autogenerated, DO NOT MODIFY
//--------------------------------------------------------------------------------
// Section: Constants (1)
//--------------------------------------------------------------------------------
pub const TPMVSC_DEFAULT_ADMIN_ALGORITHM_ID = @as(u32, 130);

//--------------------------------------------------------------------------------
// Section: Types (9)
//--------------------------------------------------------------------------------
const CLSID_TpmVirtualSmartCardManager_Value = Guid.initString("16a18e86-7f6e-4c20-ad89-4ffc0db7a96a");
pub const CLSID_TpmVirtualSmartCardManager = &CLSID_TpmVirtualSmartCardManager_Value;

const CLSID_RemoteTpmVirtualSmartCardManager_Value = Guid.initString("152ea2a8-70dc-4c59-8b2a-32aa3ca0dcac");
pub const CLSID_RemoteTpmVirtualSmartCardManager = &CLSID_RemoteTpmVirtualSmartCardManager_Value;

pub const TPMVSC_ATTESTATION_TYPE = enum(i32) {
    NONE = 0,
    AIK_ONLY = 1,
    AIK_AND_CERTIFICATE = 2,
};
pub const TPMVSC_ATTESTATION_NONE = TPMVSC_ATTESTATION_TYPE.NONE;
pub const TPMVSC_ATTESTATION_AIK_ONLY = TPMVSC_ATTESTATION_TYPE.AIK_ONLY;
pub const TPMVSC_ATTESTATION_AIK_AND_CERTIFICATE = TPMVSC_ATTESTATION_TYPE.AIK_AND_CERTIFICATE;

pub const TPMVSCMGR_STATUS = enum(i32) {
    VTPMSMARTCARD_INITIALIZING = 0,
    VTPMSMARTCARD_CREATING = 1,
    VTPMSMARTCARD_DESTROYING = 2,
    VGIDSSIMULATOR_INITIALIZING = 3,
    VGIDSSIMULATOR_CREATING = 4,
    VGIDSSIMULATOR_DESTROYING = 5,
    VREADER_INITIALIZING = 6,
    VREADER_CREATING = 7,
    VREADER_DESTROYING = 8,
    GENERATE_WAITING = 9,
    GENERATE_AUTHENTICATING = 10,
    GENERATE_RUNNING = 11,
    CARD_CREATED = 12,
    CARD_DESTROYED = 13,
};
pub const TPMVSCMGR_STATUS_VTPMSMARTCARD_INITIALIZING = TPMVSCMGR_STATUS.VTPMSMARTCARD_INITIALIZING;
pub const TPMVSCMGR_STATUS_VTPMSMARTCARD_CREATING = TPMVSCMGR_STATUS.VTPMSMARTCARD_CREATING;
pub const TPMVSCMGR_STATUS_VTPMSMARTCARD_DESTROYING = TPMVSCMGR_STATUS.VTPMSMARTCARD_DESTROYING;
pub const TPMVSCMGR_STATUS_VGIDSSIMULATOR_INITIALIZING = TPMVSCMGR_STATUS.VGIDSSIMULATOR_INITIALIZING;
pub const TPMVSCMGR_STATUS_VGIDSSIMULATOR_CREATING = TPMVSCMGR_STATUS.VGIDSSIMULATOR_CREATING;
pub const TPMVSCMGR_STATUS_VGIDSSIMULATOR_DESTROYING = TPMVSCMGR_STATUS.VGIDSSIMULATOR_DESTROYING;
pub const TPMVSCMGR_STATUS_VREADER_INITIALIZING = TPMVSCMGR_STATUS.VREADER_INITIALIZING;
pub const TPMVSCMGR_STATUS_VREADER_CREATING = TPMVSCMGR_STATUS.VREADER_CREATING;
pub const TPMVSCMGR_STATUS_VREADER_DESTROYING = TPMVSCMGR_STATUS.VREADER_DESTROYING;
pub const TPMVSCMGR_STATUS_GENERATE_WAITING = TPMVSCMGR_STATUS.GENERATE_WAITING;
pub const TPMVSCMGR_STATUS_GENERATE_AUTHENTICATING = TPMVSCMGR_STATUS.GENERATE_AUTHENTICATING;
pub const TPMVSCMGR_STATUS_GENERATE_RUNNING = TPMVSCMGR_STATUS.GENERATE_RUNNING;
pub const TPMVSCMGR_STATUS_CARD_CREATED = TPMVSCMGR_STATUS.CARD_CREATED;
pub const TPMVSCMGR_STATUS_CARD_DESTROYED = TPMVSCMGR_STATUS.CARD_DESTROYED;

pub const TPMVSCMGR_ERROR = enum(i32) {
    IMPERSONATION = 0,
    PIN_COMPLEXITY = 1,
    READER_COUNT_LIMIT = 2,
    TERMINAL_SERVICES_SESSION = 3,
    VTPMSMARTCARD_INITIALIZE = 4,
    VTPMSMARTCARD_CREATE = 5,
    VTPMSMARTCARD_DESTROY = 6,
    VGIDSSIMULATOR_INITIALIZE = 7,
    VGIDSSIMULATOR_CREATE = 8,
    VGIDSSIMULATOR_DESTROY = 9,
    VGIDSSIMULATOR_WRITE_PROPERTY = 10,
    VGIDSSIMULATOR_READ_PROPERTY = 11,
    VREADER_INITIALIZE = 12,
    VREADER_CREATE = 13,
    VREADER_DESTROY = 14,
    GENERATE_LOCATE_READER = 15,
    GENERATE_FILESYSTEM = 16,
    CARD_CREATE = 17,
    CARD_DESTROY = 18,
};
pub const TPMVSCMGR_ERROR_IMPERSONATION = TPMVSCMGR_ERROR.IMPERSONATION;
pub const TPMVSCMGR_ERROR_PIN_COMPLEXITY = TPMVSCMGR_ERROR.PIN_COMPLEXITY;
pub const TPMVSCMGR_ERROR_READER_COUNT_LIMIT = TPMVSCMGR_ERROR.READER_COUNT_LIMIT;
pub const TPMVSCMGR_ERROR_TERMINAL_SERVICES_SESSION = TPMVSCMGR_ERROR.TERMINAL_SERVICES_SESSION;
pub const TPMVSCMGR_ERROR_VTPMSMARTCARD_INITIALIZE = TPMVSCMGR_ERROR.VTPMSMARTCARD_INITIALIZE;
pub const TPMVSCMGR_ERROR_VTPMSMARTCARD_CREATE = TPMVSCMGR_ERROR.VTPMSMARTCARD_CREATE;
pub const TPMVSCMGR_ERROR_VTPMSMARTCARD_DESTROY = TPMVSCMGR_ERROR.VTPMSMARTCARD_DESTROY;
pub const TPMVSCMGR_ERROR_VGIDSSIMULATOR_INITIALIZE = TPMVSCMGR_ERROR.VGIDSSIMULATOR_INITIALIZE;
pub const TPMVSCMGR_ERROR_VGIDSSIMULATOR_CREATE = TPMVSCMGR_ERROR.VGIDSSIMULATOR_CREATE;
pub const TPMVSCMGR_ERROR_VGIDSSIMULATOR_DESTROY = TPMVSCMGR_ERROR.VGIDSSIMULATOR_DESTROY;
pub const TPMVSCMGR_ERROR_VGIDSSIMULATOR_WRITE_PROPERTY = TPMVSCMGR_ERROR.VGIDSSIMULATOR_WRITE_PROPERTY;
pub const TPMVSCMGR_ERROR_VGIDSSIMULATOR_READ_PROPERTY = TPMVSCMGR_ERROR.VGIDSSIMULATOR_READ_PROPERTY;
pub const TPMVSCMGR_ERROR_VREADER_INITIALIZE = TPMVSCMGR_ERROR.VREADER_INITIALIZE;
pub const TPMVSCMGR_ERROR_VREADER_CREATE = TPMVSCMGR_ERROR.VREADER_CREATE;
pub const TPMVSCMGR_ERROR_VREADER_DESTROY = TPMVSCMGR_ERROR.VREADER_DESTROY;
pub const TPMVSCMGR_ERROR_GENERATE_LOCATE_READER = TPMVSCMGR_ERROR.GENERATE_LOCATE_READER;
pub const TPMVSCMGR_ERROR_GENERATE_FILESYSTEM = TPMVSCMGR_ERROR.GENERATE_FILESYSTEM;
pub const TPMVSCMGR_ERROR_CARD_CREATE = TPMVSCMGR_ERROR.CARD_CREATE;
pub const TPMVSCMGR_ERROR_CARD_DESTROY = TPMVSCMGR_ERROR.CARD_DESTROY;

// TODO: this type is limited to platform 'windows8.0'
const IID_ITpmVirtualSmartCardManagerStatusCallback_Value = Guid.initString("1a1bb35f-abb8-451c-a1ae-33d98f1bef4a");
pub const IID_ITpmVirtualSmartCardManagerStatusCallback = &IID_ITpmVirtualSmartCardManagerStatusCallback_Value;
pub const ITpmVirtualSmartCardManagerStatusCallback = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        ReportProgress: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITpmVirtualSmartCardManagerStatusCallback,
                Status: TPMVSCMGR_STATUS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITpmVirtualSmartCardManagerStatusCallback,
                Status: TPMVSCMGR_STATUS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ReportError: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITpmVirtualSmartCardManagerStatusCallback,
                Error: TPMVSCMGR_ERROR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITpmVirtualSmartCardManagerStatusCallback,
                Error: TPMVSCMGR_ERROR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITpmVirtualSmartCardManagerStatusCallback_ReportProgress(self: *const T, Status: TPMVSCMGR_STATUS) HRESULT {
                return @as(*const ITpmVirtualSmartCardManagerStatusCallback.VTable, @ptrCast(self.vtable)).ReportProgress(@as(*const ITpmVirtualSmartCardManagerStatusCallback, @ptrCast(self)), Status);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITpmVirtualSmartCardManagerStatusCallback_ReportError(self: *const T, Error: TPMVSCMGR_ERROR) HRESULT {
                return @as(*const ITpmVirtualSmartCardManagerStatusCallback.VTable, @ptrCast(self.vtable)).ReportError(@as(*const ITpmVirtualSmartCardManagerStatusCallback, @ptrCast(self)), Error);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows8.0'
const IID_ITpmVirtualSmartCardManager_Value = Guid.initString("112b1dff-d9dc-41f7-869f-d67fee7cb591");
pub const IID_ITpmVirtualSmartCardManager = &IID_ITpmVirtualSmartCardManager_Value;
pub const ITpmVirtualSmartCardManager = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        CreateVirtualSmartCard: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITpmVirtualSmartCardManager,
                pszFriendlyName: ?[*:0]const u16,
                bAdminAlgId: u8,
                pbAdminKey: [*:0]const u8,
                cbAdminKey: u32,
                pbAdminKcv: [*:0]const u8,
                cbAdminKcv: u32,
                pbPuk: [*:0]const u8,
                cbPuk: u32,
                pbPin: [*:0]const u8,
                cbPin: u32,
                fGenerate: BOOL,
                pStatusCallback: ?*ITpmVirtualSmartCardManagerStatusCallback,
                ppszInstanceId: ?*?PWSTR,
                pfNeedReboot: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITpmVirtualSmartCardManager,
                pszFriendlyName: ?[*:0]const u16,
                bAdminAlgId: u8,
                pbAdminKey: [*:0]const u8,
                cbAdminKey: u32,
                pbAdminKcv: [*:0]const u8,
                cbAdminKcv: u32,
                pbPuk: [*:0]const u8,
                cbPuk: u32,
                pbPin: [*:0]const u8,
                cbPin: u32,
                fGenerate: BOOL,
                pStatusCallback: ?*ITpmVirtualSmartCardManagerStatusCallback,
                ppszInstanceId: ?*?PWSTR,
                pfNeedReboot: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DestroyVirtualSmartCard: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITpmVirtualSmartCardManager,
                pszInstanceId: ?[*:0]const u16,
                pStatusCallback: ?*ITpmVirtualSmartCardManagerStatusCallback,
                pfNeedReboot: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITpmVirtualSmartCardManager,
                pszInstanceId: ?[*:0]const u16,
                pStatusCallback: ?*ITpmVirtualSmartCardManagerStatusCallback,
                pfNeedReboot: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITpmVirtualSmartCardManager_CreateVirtualSmartCard(self: *const T, pszFriendlyName: ?[*:0]const u16, bAdminAlgId: u8, pbAdminKey: [*:0]const u8, cbAdminKey: u32, pbAdminKcv: [*:0]const u8, cbAdminKcv: u32, pbPuk: [*:0]const u8, cbPuk: u32, pbPin: [*:0]const u8, cbPin: u32, fGenerate: BOOL, pStatusCallback: ?*ITpmVirtualSmartCardManagerStatusCallback, ppszInstanceId: ?*?PWSTR, pfNeedReboot: ?*BOOL) HRESULT {
                return @as(*const ITpmVirtualSmartCardManager.VTable, @ptrCast(self.vtable)).CreateVirtualSmartCard(@as(*const ITpmVirtualSmartCardManager, @ptrCast(self)), pszFriendlyName, bAdminAlgId, pbAdminKey, cbAdminKey, pbAdminKcv, cbAdminKcv, pbPuk, cbPuk, pbPin, cbPin, fGenerate, pStatusCallback, ppszInstanceId, pfNeedReboot);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITpmVirtualSmartCardManager_DestroyVirtualSmartCard(self: *const T, pszInstanceId: ?[*:0]const u16, pStatusCallback: ?*ITpmVirtualSmartCardManagerStatusCallback, pfNeedReboot: ?*BOOL) HRESULT {
                return @as(*const ITpmVirtualSmartCardManager.VTable, @ptrCast(self.vtable)).DestroyVirtualSmartCard(@as(*const ITpmVirtualSmartCardManager, @ptrCast(self)), pszInstanceId, pStatusCallback, pfNeedReboot);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_ITpmVirtualSmartCardManager2_Value = Guid.initString("fdf8a2b9-02de-47f4-bc26-aa85ab5e5267");
pub const IID_ITpmVirtualSmartCardManager2 = &IID_ITpmVirtualSmartCardManager2_Value;
pub const ITpmVirtualSmartCardManager2 = extern struct {
    pub const VTable = extern struct {
        base: ITpmVirtualSmartCardManager.VTable,
        CreateVirtualSmartCardWithPinPolicy: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITpmVirtualSmartCardManager2,
                pszFriendlyName: ?[*:0]const u16,
                bAdminAlgId: u8,
                pbAdminKey: [*:0]const u8,
                cbAdminKey: u32,
                pbAdminKcv: [*:0]const u8,
                cbAdminKcv: u32,
                pbPuk: [*:0]const u8,
                cbPuk: u32,
                pbPin: [*:0]const u8,
                cbPin: u32,
                pbPinPolicy: [*:0]const u8,
                cbPinPolicy: u32,
                fGenerate: BOOL,
                pStatusCallback: ?*ITpmVirtualSmartCardManagerStatusCallback,
                ppszInstanceId: ?*?PWSTR,
                pfNeedReboot: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITpmVirtualSmartCardManager2,
                pszFriendlyName: ?[*:0]const u16,
                bAdminAlgId: u8,
                pbAdminKey: [*:0]const u8,
                cbAdminKey: u32,
                pbAdminKcv: [*:0]const u8,
                cbAdminKcv: u32,
                pbPuk: [*:0]const u8,
                cbPuk: u32,
                pbPin: [*:0]const u8,
                cbPin: u32,
                pbPinPolicy: [*:0]const u8,
                cbPinPolicy: u32,
                fGenerate: BOOL,
                pStatusCallback: ?*ITpmVirtualSmartCardManagerStatusCallback,
                ppszInstanceId: ?*?PWSTR,
                pfNeedReboot: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace ITpmVirtualSmartCardManager.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITpmVirtualSmartCardManager2_CreateVirtualSmartCardWithPinPolicy(self: *const T, pszFriendlyName: ?[*:0]const u16, bAdminAlgId: u8, pbAdminKey: [*:0]const u8, cbAdminKey: u32, pbAdminKcv: [*:0]const u8, cbAdminKcv: u32, pbPuk: [*:0]const u8, cbPuk: u32, pbPin: [*:0]const u8, cbPin: u32, pbPinPolicy: [*:0]const u8, cbPinPolicy: u32, fGenerate: BOOL, pStatusCallback: ?*ITpmVirtualSmartCardManagerStatusCallback, ppszInstanceId: ?*?PWSTR, pfNeedReboot: ?*BOOL) HRESULT {
                return @as(*const ITpmVirtualSmartCardManager2.VTable, @ptrCast(self.vtable)).CreateVirtualSmartCardWithPinPolicy(@as(*const ITpmVirtualSmartCardManager2, @ptrCast(self)), pszFriendlyName, bAdminAlgId, pbAdminKey, cbAdminKey, pbAdminKcv, cbAdminKcv, pbPuk, cbPuk, pbPin, cbPin, pbPinPolicy, cbPinPolicy, fGenerate, pStatusCallback, ppszInstanceId, pfNeedReboot);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_ITpmVirtualSmartCardManager3_Value = Guid.initString("3c745a97-f375-4150-be17-5950f694c699");
pub const IID_ITpmVirtualSmartCardManager3 = &IID_ITpmVirtualSmartCardManager3_Value;
pub const ITpmVirtualSmartCardManager3 = extern struct {
    pub const VTable = extern struct {
        base: ITpmVirtualSmartCardManager2.VTable,
        CreateVirtualSmartCardWithAttestation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const ITpmVirtualSmartCardManager3,
                pszFriendlyName: ?[*:0]const u16,
                bAdminAlgId: u8,
                pbAdminKey: [*:0]const u8,
                cbAdminKey: u32,
                pbAdminKcv: [*:0]const u8,
                cbAdminKcv: u32,
                pbPuk: [*:0]const u8,
                cbPuk: u32,
                pbPin: [*:0]const u8,
                cbPin: u32,
                pbPinPolicy: [*:0]const u8,
                cbPinPolicy: u32,
                attestationType: TPMVSC_ATTESTATION_TYPE,
                fGenerate: BOOL,
                pStatusCallback: ?*ITpmVirtualSmartCardManagerStatusCallback,
                ppszInstanceId: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const ITpmVirtualSmartCardManager3,
                pszFriendlyName: ?[*:0]const u16,
                bAdminAlgId: u8,
                pbAdminKey: [*:0]const u8,
                cbAdminKey: u32,
                pbAdminKcv: [*:0]const u8,
                cbAdminKcv: u32,
                pbPuk: [*:0]const u8,
                cbPuk: u32,
                pbPin: [*:0]const u8,
                cbPin: u32,
                pbPinPolicy: [*:0]const u8,
                cbPinPolicy: u32,
                attestationType: TPMVSC_ATTESTATION_TYPE,
                fGenerate: BOOL,
                pStatusCallback: ?*ITpmVirtualSmartCardManagerStatusCallback,
                ppszInstanceId: ?*?PWSTR,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace ITpmVirtualSmartCardManager2.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn ITpmVirtualSmartCardManager3_CreateVirtualSmartCardWithAttestation(self: *const T, pszFriendlyName: ?[*:0]const u16, bAdminAlgId: u8, pbAdminKey: [*:0]const u8, cbAdminKey: u32, pbAdminKcv: [*:0]const u8, cbAdminKcv: u32, pbPuk: [*:0]const u8, cbPuk: u32, pbPin: [*:0]const u8, cbPin: u32, pbPinPolicy: [*:0]const u8, cbPinPolicy: u32, attestationType: TPMVSC_ATTESTATION_TYPE, fGenerate: BOOL, pStatusCallback: ?*ITpmVirtualSmartCardManagerStatusCallback, ppszInstanceId: ?*?PWSTR) HRESULT {
                return @as(*const ITpmVirtualSmartCardManager3.VTable, @ptrCast(self.vtable)).CreateVirtualSmartCardWithAttestation(@as(*const ITpmVirtualSmartCardManager3, @ptrCast(self)), pszFriendlyName, bAdminAlgId, pbAdminKey, cbAdminKey, pbAdminKcv, cbAdminKcv, pbPuk, cbPuk, pbPin, cbPin, pbPinPolicy, cbPinPolicy, attestationType, fGenerate, pStatusCallback, ppszInstanceId);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

//--------------------------------------------------------------------------------
// Section: Functions (0)
//--------------------------------------------------------------------------------

//--------------------------------------------------------------------------------
// Section: Unicode Aliases (0)
//--------------------------------------------------------------------------------
const thismodule = @This();
pub usingnamespace switch (@import("../zig.zig").unicode_mode) {
    .ansi => struct {},
    .wide => struct {},
    .unspecified => if (@import("builtin").is_test) struct {} else struct {},
};
//--------------------------------------------------------------------------------
// Section: Imports (5)
//--------------------------------------------------------------------------------
const Guid = @import("../zig.zig").Guid;
const BOOL = @import("../foundation.zig").BOOL;
const HRESULT = @import("../foundation.zig").HRESULT;
const IUnknown = @import("../system/com.zig").IUnknown;
const PWSTR = @import("../foundation.zig").PWSTR;

test {
    @setEvalBranchQuota(comptime @import("std").meta.declarations(@This()).len * 3);

    // reference all the pub declarations
    if (!@import("builtin").is_test) return;
    inline for (comptime @import("std").meta.declarations(@This())) |decl| {
        if (decl.is_pub) {
            _ = @field(@This(), decl.name);
        }
    }
}
