📄 wmisample.c
字号:
/*++
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 + -