⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wmisample.c

📁 WMI implementation in a iSCSI miniport can be tested using the iscsicli.exe application, device ma
💻 C
📖 第 1 页 / 共 5 页
字号:
/*++

Copyright (C) Microsoft Corporation, 2000

Module Name:

    wmi.c

Abstract:

    This file contains WMI routines for iSCSI miniport driver.

Environment:

    kernel mode only

--*/


UCHAR iScsiQuerySecurityCapabilities(
    PISCSI_ADAPTER_EXTENSION AdapterExtension,
    ULONG BufferAvail,
    PUCHAR Buffer,
    PULONG InstanceLength,
    PULONG SizeNeeded
    );

UCHAR iScsiQueryDiscoveryConfig(
    PISCSI_ADAPTER_EXTENSION AdapterExtension,
    ULONG BufferAvail,
    PUCHAR Buffer,
    PULONG InstanceLength,
    PULONG SizeNeeded
    );

UCHAR iScsiAdvanceString(
    OUT PWCHAR *String,
    OUT PUSHORT StringLen,
    IN OUT PUCHAR *Buffer,
    IN OUT PULONG BufferSize
    );

UCHAR iScsiSetDiscoveryConfig(
    PISCSI_ADAPTER_EXTENSION AdapterExtension,
    ULONG BufferSize,
    PUCHAR Buffer
    );

UCHAR iScsiAddPortalGroup(
    IN OUT PUCHAR *Buffer,
    IN OUT PULONG SizeLeft,
    IN OUT PULONG SizeNeeded,
    IN ULONG PortalCount
    );

VOID iScsiCopyUTF8ToCounted(
    PWCHAR p,
    PUTF8CHAR UTF8,
    ULONG UTF8Len
    );

UCHAR iScsiAddPortalToGroup(
    IN OUT PUCHAR *Buffer,
    IN OUT PULONG SizeLeft,
    IN OUT PULONG SizeNeeded,
    IN ULONG Address,
    IN PUTF8CHAR SymbolicName,
    IN USHORT Socket,
    IN ULONG SecurityBitmap,
    IN ULONG KeySize,
    IN PUCHAR Key
    );

UCHAR iScsiAddDiscoveredTarget(
    IN OUT PUCHAR *Buffer,
    IN OUT PULONG SizeLeft,
    IN OUT PULONG SizeNeeded,
    IN PUTF8CHAR Name,
    IN PUTF8CHAR Alias,
    IN PUTF8CHAR DDName,
    IN ULONG DDID,
    IN ULONG PortalGroupCount
    );

UCHAR iScsiReportDiscoveredTargets2(
    PISCSI_ADAPTER_EXTENSION AdapterExtension,
    ULONG BufferSize,
    PULONG SizeNeeded,
    PUCHAR Buffer
    );

UCHAR
iSpReadTCPConfigInfo(
    IN PISCSI_ADAPTER_EXTENSION AdapterExtension,
    OUT PUCHAR Buffer
   );

UCHAR
iSpReadNICConfigInfo(
    IN PISCSI_ADAPTER_EXTENSION AdapterExtension,
    OUT PUCHAR Buffer
   );

UCHAR
iSpReadNICPerfData(
    IN PISCSI_ADAPTER_EXTENSION AdapterExtension,
    OUT PUCHAR Buffer
   );

UCHAR 
iSpSetTCPConfigInfo(
    IN PISCSI_ADAPTER_EXTENSION AdapterExtension,
    IN ULONG BufferSize,
    IN PUCHAR Buffer
    );

UCHAR
iScsiSetWmiDataBlock(
    IN PVOID Context,
    IN PSCSIWMI_REQUEST_CONTEXT DispatchConiScsiQueryWmiDataBlocktext,
    IN ULONG GuidIndex,
    IN ULONG InstanceIndex,
    IN ULONG BufferSize,
    IN PUCHAR Buffer
    );


GUID iSCSI_Operations_GUID = MSiSCSI_OperationsGuid;
GUID iSCSI_HBAInformation_GUID = MSiSCSI_HBAInformationGuid;
GUID iScsiInitiatorInstanceStatisticsGuid = MSiSCSI_InitiatorInstanceStatisticsGuid;
GUID iScsiInitiatorInstanceFailureEventGuid = MSiSCSI_InitiatorInstanceFailureEventGuid;
GUID iScsiConnectStatisticsGuid = MSiSCSI_ConnectionStatisticsGuid;
GUID iScsiSessionStatisticsGuid = MSiSCSI_SessionStatisticsGuid;
GUID iScsi_InitiatorSessionInfo_GUID = MSiSCSI_InitiatorSessionInfoGuid;
GUID iScsi_InitiatorLoginStatistics_GUID = MSiSCSI_InitiatorLoginStatisticsGuid;
GUID iScsiInitiatorNodeFailureEventGuid = MSiSCSI_InitiatorInstanceFailureEventGuid;
GUID iScsiAdapterEventGuid = MSiSCSI_AdapterEventGuid;
GUID iScsiPortalInfoClassGuid = MSiSCSI_PortalInfoClassGuid;
GUID iScsiTargetMappingClassGuid = MSiSCSI_TargetMappingsGuid;
GUID iScsiPersistentLoginsClassGuid = MSiSCSI_PersistentLoginsGuid;
GUID iScsiLBOperationsGuid = MSiSCSI_LB_OperationsGuid;
GUID iScsiQueryLBPolicyGuid = MSiSCSI_QueryLBPolicyGuid;
GUID iSCSIEventlogGuid = MSiSCSI_EventlogGuid;
GUID iSCSIRedirectPortalGuid = MSiSCSI_RedirectPortalInfoClassGuid;
GUID iSCSIReqProcTimeGuid = MSiSCSI_RequestTimeStatisticsGuid;

GUID iScsiDiscoveryConfigGuid = MSiSCSI_DiscoveryConfigGuid;
GUID iSCSI_DiscoveryOperationsGuid = MSiSCSI_DiscoveryOperationsGuid;
GUID iSCSI_SecurityCapabilitiesGuid = MSiSCSI_SecurityCapabilitiesGuid;
GUID iSCSI_SecurityConfigOperationsGuid = MSiSCSI_SecurityConfigOperationsGuid;
GUID MSiScsiTCPConfigGuid = MSiSCSI_TCPIPConfigGuid;
GUID MSiScsiNICConfigGuid = MSiSCSI_NICConfigGuid;
GUID MSiScsiNICPerfGuid = MSiSCSI_NICPerformanceGuid;
GUID MSiSCSIManagementOperationsGuid= MSiSCSI_ManagementOperationsGuid;

//
// This GUID will be replaced with the GUID for WMI Tracing in the port driver
//
GUID iSCSIDummyGuid = { 0,0,0, { 0,0,0,0,0,0,0,0 } };

//
// The index numbers should correspond to the offset in
// iScsiWmiGuidList array given below.
//
#define iSCSI_Operations_GUID_Index                        0
#define iSCSI_HBAInformation_GUID_Index                    1
#define iScsi_InitiatorInstanceStatistics_GUID_INDEX       2
#define iScsi_InitiatorInstanceFailureEvent_GUID_INDEX     3
#define iScsi_ConnectStatistics_GUID_INDEX                 4
#define iScsi_SessionStatistics_GUID_INDEX                 5
#define iScsi_InitiatorSessionInfo_GUID_INDEX              6
#define iScsi_InitiatorLoginStatistics_GUID_INDEX          7
#define iScsi_InitiatorNodeFailureEvent_GUID_INDEX         8
#define iScsi_AdapterEvent_GUID_Index                      9
#define iScsi_PortalInfoClass_GUID_Index                   10
#define iScsi_TargetMapping_GUID_Index                     11
#define iScsi_PersistentLogin_GUID_Index                   12
#define iScsi_LB_Operations_GUID_Index                     13
#define iScsi_Query_LB_Policy_GUID_Index                   14
#define iScsi_Eventlog_GUID_Index                          15
#define iScsi_Redirect_Portal_GUID_Index                   16
#define iScsi_RequestProcessingTime_GUID_Index             17

#define iScsi_MAX_GUID_INDEX                               iScsi_RequestProcessingTime_GUID_Index

#define iScsiDiscoveryConfigGuid_INDEX                     iScsi_MAX_GUID_INDEX + 1
#define iSCSI_DiscoveryOperationsGuid_INDEX                iScsi_MAX_GUID_INDEX + 2
#define iSCSI_SecurityCapabilitiesGuid_INDEX               iScsi_MAX_GUID_INDEX + 3
#define iSCSI_SecurityConfigOperationsGuid_INDEX           iScsi_MAX_GUID_INDEX + 4
#define iScsi_TCPConfig_GUID_Index                         iScsi_MAX_GUID_INDEX + 5
#define iScsi_NICConfig_GUID_Index                         iScsi_MAX_GUID_INDEX + 6
#define iScsi_NICPerf_GUID_Index                           iScsi_MAX_GUID_INDEX + 7
#define iScsi_ManagementOperation_GUID_Index               iScsi_MAX_GUID_INDEX + 8

//
// GUID List and number of GUIDs in the list
//
SCSIWMIGUIDREGINFO iScsiWmiGuidList[] = 
{
    {
        &iSCSI_Operations_GUID,
        1,
        0
    },

    {
        &iSCSI_HBAInformation_GUID,
        1,
        0
    },

    {
        &iScsiInitiatorInstanceStatisticsGuid,
        1,
        0
    },

    {
        &iScsiInitiatorInstanceFailureEventGuid,
        1,
        WMIREG_FLAG_EVENT_ONLY_GUID
    },

    {
        &iScsiConnectStatisticsGuid,
        0xffffffff, //dynamic instance names
        0
     },

    {
        &iScsiSessionStatisticsGuid,
        0xffffffff, //dynamic instance names
        0
    },

    {
        &iScsi_InitiatorSessionInfo_GUID,
        1, 
        0
    },

    {
        &iScsi_InitiatorLoginStatistics_GUID,
        1,
        0
    },

    {
        &iScsiInitiatorNodeFailureEventGuid,
        1,
        WMIREG_FLAG_EVENT_ONLY_GUID
    },

    {
        &iScsiAdapterEventGuid,
        1,
        WMIREG_FLAG_EVENT_ONLY_GUID
    },

    {
        &iScsiPortalInfoClassGuid,
        1, 
        0
    },

    {
        &iScsiTargetMappingClassGuid,
        1, 
        0
    },

    {
        &iScsiPersistentLoginsClassGuid,
        1,
        0
    },

    {
        &iScsiLBOperationsGuid,
        1,
        0
    },

    {
        &iScsiQueryLBPolicyGuid,
        1,
        0
    },

    {
        &iSCSIEventlogGuid,
        1,
        0
    },

    {
        &iSCSIRedirectPortalGuid,
        1,
        0
    },

    {
        &iSCSIReqProcTimeGuid,
        0xffffffff, //dynamic instance names
        0
    },

    {
        &iScsiDiscoveryConfigGuid,
        1,
        0
    },

    {
        &iSCSI_DiscoveryOperationsGuid,
        1,
        0
    },

    {
        &iSCSI_SecurityCapabilitiesGuid,
        1,
        0
    },  
    
    {
        &iSCSI_SecurityConfigOperationsGuid,
        1,
        0
    },  
    
    {
        &MSiScsiTCPConfigGuid,
        1,
        0
    },

    {
        &MSiScsiNICConfigGuid,
        1,
        0
    },

    {
        &MSiScsiNICPerfGuid,
        1,
        0
    },
    
    {
        &MSiSCSIManagementOperationsGuid,
        1,
        0
    },

};

#define iScsiWmiGuidCount (sizeof(iScsiWmiGuidList) / sizeof(SCSIWMIGUIDREGINFO))

//
// WMI Guid list for the PDO
//
GUID iSCSI_LUNMappingInformationGuid = MSiSCSI_LUNMappingInformationGuid;

#define MSiSCSI_LUNMappingInformation_Index 0

SCSIWMIGUIDREGINFO iScsiPDOWmiGuidList[] = 
{
    {
        &iSCSI_LUNMappingInformationGuid,
        1,
        0
    }
};

#define iScsiPDOWmiGuidCount (sizeof(iScsiPDOWmiGuidList) / sizeof(SCSIWMIGUIDREGINFO))

VOID 
iScsiWmiInitializeContext(
    IN PISCSI_ADAPTER_EXTENSION AdapterExtension
    )
/*+++

Routine Description:

    This routine will initialize the wmilib context structure with the
    guid list and the pointers to the wmilib callback functions. 

Arguments:

    AdapterExtension - Adpater extension
    
Return Value:

    None.
    
--*/
{
    PSCSI_WMILIB_CONTEXT wmiLibContext;


    //
    // Initialize the wmilib context for the adapter
    //
    wmiLibContext = &(AdapterExtension->WmiLibContext);

    wmiLibContext->GuidList = iScsiWmiGuidList;
    wmiLibContext->GuidCount = iScsiWmiGuidCount;

    //
    // Set pointers to WMI callback routines
    //
    wmiLibContext->QueryWmiRegInfo = iScsiQueryWmiRegInfo;
    wmiLibContext->QueryWmiDataBlock = iScsiQueryWmiDataBlock;
    wmiLibContext->ExecuteWmiMethod = iScsiExecuteWmiMethod;
    wmiLibContext->WmiFunctionControl = NULL;
    wmiLibContext->SetWmiDataItem = NULL;


    wmiLibContext->SetWmiDataBlock = iScsiSetWmiDataBlock;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -