//***************************************************************************
//
// 
//  Module: iScsi Discovery api
//
//  Purpose: 
//
//  Copyright (c) 2001 Microsoft Corporation
//
//***************************************************************************

#pragma autorecover
#pragma namespace("\\\\.\\Root\\WMI")

[WmiGenerateHeader(FALSE),WMI,guid("{9AC5D4A1-1A1A-48ec-8E79-735806E9A1FA}"),cpp_quote("\n//***************************************************************************\n//\n//  iscsiprf.h\n// \n//  Module: iSCSI Discovery api\n//\n//  Purpose: Internal header defining interface between user mode discovery\n//           api dll and HBA driver miniport.\n//\n//  Note: These classes are recommended as by implementing them the data \n//        exposed will be available in sysmon (perfmon) when running on \n//        Windows XP and Windows .Net server\n//\n//  Copyright (c) 2001 Microsoft Corporation\n//\n//***************************************************************************\n\n//\n// Definitions for iscsi security flags. These flags provide\n// information about the security expectations of a target portal and\n// are needed to insure a successful IKE/IPSEC negotiation. Note that\n// the flags and values are taken directly from the iSNS spec\n//\n\n    // 1 = Tunnel Mode Preferred; 0 = No Preference\n#define ISCSI_SECURITY_FLAG_TUNNEL_MODE_PREFERRED    0x00000040\n\n    // 1 = Transport Mode Preferred; 0 = No Preference\n#define ISCSI_SECURITY_FLAG_TRANSPORT_MODE_PREFERRED 0x00000020\n               \n    // 1 = PFS Enabled; 0 = PFS Disabled\n#define ISCSI_SECURITY_FLAG_PFS_ENABLED              0x00000010\n               \n    // 1 = Aggressive Mode Enabled; 0 = Disabled\n#define ISCSI_SECURITY_FLAG_AGGRESSIVE_MODE_ENABLED  0x00000008\n               \n    // 1 = Main Mode Enabled; 0 = MM Disabled\n#define ISCSI_SECURITY_FLAG_MAIN_MODE_ENABLED        0x00000004\n               \n    // 1 = IKE/IPSec Enabled; 0 = IKE/IPSec Disabled\n#define ISCSI_SECURITY_FLAG_IKE_IPSEC_ENABLED        0x00000002\n\n    // If set then all other ISCSI_SECURITY_FLAGS are valid                \n#define ISCSI_SECURITY_FLAG_VALID                    0x00000001                \n\n\n//\n// Types of addresses that can be passed by management app to driver\n//\ntypedef enum {\n           // Text based host name. This needs to be resolved to binary form\n    ISCSI_IP_ADDRESS_TEXT = 0,\n           // Binary IPv4 address\n    ISCSI_IP_ADDRESS_IPV4 = 1,\n           // Binary IPv6 address\n    ISCSI_IP_ADDRESS_IPV6 = 2,\n           // Empty address\n    ISCSI_IP_ADDRESS_EMPTY = 3\n} ISCSIIPADDRESSTYPE, *PISCSIIPADDRESSTYPE;\n")] 
class ISCSI_IP_Address
{
  [WmiDataId(1),read,write,Values{"Text Address", "IpV4 Address", "IpV6 Address", "Empty Address"},ValueMap{"0", "1", "2", "3"}] uint32 Type;
  [WmiDataId(2),read,write,DisplayInHex] uint32 IpV4Address;
  [WmiDataId(3),read,write,MAX(16)] uint8 IpV6Address[];
  [WmiDataId(4),read,write] uint32 IpV6FlowInfo;
  [WmiDataId(5),read,write] uint32 IpV6ScopeId;
  [WmiDataId(6),read,write,MaxLen(256)] string TextAddress;
};

[WmiGenerateHeader(FALSE),WMI,guid("{DE5051A7-BF27-48f1-BD12-07CADE92AEFD}")] 
class ISCSI_TargetPortal
{
  [WmiDataId(1)] ISCSI_IP_Address Address;
  [WmiDataId(2)] uint32 Reserved;
  [WmiDataId(3)] uint16 Socket;
};

[WMI,WmiGenerateHeader(FALSE),guid("{3081F2A5-95F5-4d2a-813D-EE59864C6FC5}")] 
class ISCSI_TargetPortalGroup
{
  [WmiDataId(1)] uint32 PortalCount;
  [WmiDataId(2),WmiSizeIs("PortalCount")] ISCSI_TargetPortal Portals[];
};

[WMI,WmiGenerateHeader(FALSE),guid("{3011A7BD-0491-478e-8C79-3C76424D05E2}"),cpp_quote("#ifndef _ISCSI_ISCSIDSC_\ntypedef enum\n{\n   ISCSI_DIGEST_TYPE_NONE = 0,\n   ISCSI_DIGEST_TYPE_CRC32C = 1\n} ISCSI_DIGEST_TYPES, *PISCSI_DIGEST_TYPES;\n\ntypedef enum\n{\n   ISCSI_NO_AUTH_TYPE = 0,\n   ISCSI_CHAP_AUTH_TYPE = 1,\n   ISCSI_MUTUAL_CHAP_AUTH_TYPE = 2 \n} ISCSI_AUTH_TYPES, *PISCSI_AUTH_TYPES;\n#endif\n"),Description("These are options that can be used for logging into a target")] 
class ISCSI_LoginOptions
{
  [WmiDataId(1),BitMap{"0x00000001", "0x00000002", "0x00000004", "0x00000008", "0x00000010"},cpp_quote("//\n// Bit flags for InformationSpecifies\n//\n#define ISCSI_LOGIN_OPTIONS_HEADER_DIGEST               0x00000001\n#define ISCSI_LOGIN_OPTIONS_DATA_DIGEST                 0x00000002\n#define ISCSI_LOGIN_OPTIONS_MAXIMUM_CONNECTIONS         0x00000004\n#define ISCSI_LOGIN_OPTIONS_DEFAULT_TIME_2_WAIT         0x00000008\n#define ISCSI_LOGIN_OPTIONS_DEFAULT_TIME_2_RETAIN       0x00000010\n#define ISCSI_LOGIN_OPTIONS_USERNAME                    0x00000020\n#define ISCSI_LOGIN_OPTIONS_PASSWORD                    0x00000040\n#define ISCSI_LOGIN_OPTIONS_AUTH_TYPE                   0x00000080\n\n")] uint32 InformationSpecified;
  [WmiDataId(2),ValueMap{"0", "1"},Values{"None", "CRC32C"}] uint32 HeaderDigest;
  [WmiDataId(3),ValueMap{"0", "1"},Values{"None", "CRC32C"}] uint32 DataDigest;
  [WmiDataId(4)] uint32 MaximumConnections;
  [WmiDataId(5)] uint32 DefaultTime2Wait;
  [WmiDataId(6)] uint32 DefaultTime2Retain;
  [WmiDataId(7),cpp_quote("//\n// bit flags for ISCSI_LOGIN_FLAGS\n//\n#ifndef _ISCSI_ISCSIDSC_\n#define ISCSI_LOGIN_FLAGS ULONG\n\n#define ISCSI_LOGIN_FLAG_REQUIRE_IPSEC                0x00000001\n#define ISCSI_LOGIN_FLAG_MULTIPATH_ENABLED            0x00000002\n#define ISCSI_LOGIN_FLAG_RESERVED1                    0x00000004\n#define ISCSI_LOGIN_FLAG_ALLOW_PORTAL_HOPPING         0x00000008\n#define ISCSI_LOGIN_FLAG_USE_RADIUS_RESPONSE          0x00000010\n#define ISCSI_LOGIN_FLAG_USE_RADIUS_VERIFICATION          0x00000020\n\n#endif\n"),BitValues{"Require IPSEC", "Multipath Enabled", "Reserved1", "Allow Portal Hopping"},BitMap{"0x00000001", "0x00000002", "0x00000004", "0x00000008"}] uint32 LoginFlags;
  [WmiDataId(8),ValueMap{"0", "1", "2"}] uint32 AuthType;
};

[WMI,WmiGenerateHeader(FALSE),guid("{994FF278-3512-4d9b-A241-54CEF45F5A25}")] 
class ISCSI_LUNList
{
  [WmiDataId(1)] uint64 TargetLUN;
  [WmiDataId(2)] uint32 OSLUN;
  [WmiDataId(3)] uint32 Reserved;
};

[WMI,WmiGenerateHeader(FALSE),guid("{21A28820-3C4C-4944-AC4F-DA7FEBA21168}")] 
class ISCSI_TargetMapping
{
  [WmiDataId(1)] uint32 OSBus;
  [WmiDataId(2)] uint32 OSTarget;
  [WmiDataId(3)] uint64 UniqueSessionId;
  [WmiDataId(4)] uint32 LUNCount;
  [WmiDataId(5),MaxLen(223)] string TargetName;
  [WmiDataId(6)] boolean FromPersistentLogin;
  [WmiDataId(7)] uint64 Reserved;
  [WmiDataId(8),WmiSizeIs("LunCount")] ISCSI_LUNList LUNList[];
};

[Dynamic,Provider("WMIProv"),WMI,guid("{36B58EA2-C461-4bb0-AC8E-952F59D251ED}"),PerfDetail(100),HiPerf,cpp_quote("\n//***************************************************************************\n//\n//  iscsiprf.h\n// \n//  Module: iSCSI Discovery api\n//\n//  Purpose: Internal header defining interface between user mode discovery\n//           api dll and HBA driver miniport.\n//\n//  Note: These classes are recommended as by implementing them the data \n//        exposed will be available in sysmon (perfmon) when running on \n//        Windows XP and Windows .Net server\n//\n//  Copyright (c) 2001 Microsoft Corporation\n//\n//***************************************************************************\n\n//\n// This class exposes the main mode IPSEC statistics\n//\n// This class must be registered with PDO instance names using a single instance\n//\n")] 
class MSiSCSI_MMIPSECStats : Win32_PerfRawData
{
  [read,key] String InstanceName;
  [read] boolean Active;
  [read,WmiDataId(1),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// An acquire is a request by the IPSEC driver to have IKE perform a task. The active acquire statistic includes the outstanding request and the number of any queued requests. Typically, the number of active acquires is 1. Under a heavy load, the number of active acquires is 1 and the number of requests that are queued by IKE for processing.")] uint64 ActiveAcquire;
  [read,WmiDataId(2),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of IKE messages received that are queued for processing.")] uint64 ActiveReceive;
  [read,WmiDataId(3),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of times that an acquire has failed.")] uint64 AcquireFailures;
  [read,WmiDataId(4),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of times that the TCP stack has failed when receiving IKE messages.")] uint64 ReceiveFailures;
  [read,WmiDataId(5),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of times that the TCP/IP stack has failed when sending IKE messages.")] uint64 SendFailures;
  [read,WmiDataId(6),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of entries in the acquire heap, which stores active acquires. This number increases under a heavy load and then gradually decreases over time, as the acquire heap is cleared.")] uint64 AcquireHeapSize;
  [read,WmiDataId(7),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of entries in the IKE receive buffers for incoming IKE messages.")] uint64 ReceiveHeapSize;
  [read,WmiDataId(8),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The total number of negotiation failures that occurred during main mode (also known as Phase I) or quick mode (also known as Phase II) negotiation.")] uint64 NegotiationFailures;
  [read,WmiDataId(9),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The total number of identity authentication failures (Kerberos, certificate, and preshared key) that occurred during main mode negotiation.")] uint64 AuthenticationFailures;
  [read,WmiDataId(10),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// A cookie is a value contained in a received IKE message that is used by IKE to find the state of an active main mode. A cookie in a received IKE message that cannot be matched with an active main mode is invalid.")] uint64 InvalidCookiesReceived;
  [read,WmiDataId(11),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The total number of requests submitted by IKE to obtain a unique Security Parameters Index (SPI).")] uint64 TotalGetSPI;
  [read,WmiDataId(12),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of outbound quick mode security associations (SAs) added by IKE ")] uint64 KeyAdditions;
  [read,WmiDataId(13),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of inbound quick mode security associations (SAs) added by IKE ")] uint64 KeyUpdates;
  [read,WmiDataId(14),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The total number of requests submitted by IKE to obtain a unique Security Parameters Index (SPI) that failed.")] uint64 GetSPIFailures;
  [read,WmiDataId(15),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of outbound quick mode security associations (SAs) submitted by IKE that failed")] uint64 KeyAdditionFailures;
  [read,WmiDataId(16),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of inbound quick mode security associations (SAs) added by IKE ")] uint64 KeyUpdateFailures;
  [read,WmiDataId(17),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of quick mode state entries.")] uint64 ConnectionListSize;
  [read,WmiDataId(18),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The total number of successful SAs created during main mode negotiations.")] uint64 OakleyMainMode;
  [read,WmiDataId(19),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The total number of successful SAs created during quick mode negotiations")] uint64 OakleyQuickMode;
  [read,WmiDataId(20),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of received IKE messages that are invalid, including IKE messages with invalid header fields, incorrect payload lengths, and incorrect values for the responder cookie (when it should be set to 0).")] uint64 InvalidPackets;
  [read,WmiDataId(21),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The total number of negotiations that resulted in the use of plaintext (also known as soft SAs). This typically reflects the number of associations formed with computers that did not respond to main mode negotiation attempts. This can include both non-IPSEC-aware computers and IPSEC-aware computers that do not have IPSEC policy to negotiate security with this IPSEC peer.")] uint64 SoftAssociations;
};

[Dynamic,Provider("WMIProv"),WMI,guid("{B4D1C606-8682-4b7a-AC6B-D883D91555FB}"),PerfDetail(100),HiPerf,cpp_quote("//\n// This class exposes the quick mode IPSEC statistics\n//\n// This class must be registered with PDO instance names using a single instance\n//\n")] 
class MSiSCSI_QMIPSECStats : Win32_PerfRawData
{
  [read,key] String InstanceName;
  [read] boolean Active;
  [read,WmiDataId(1),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of active IPSEC SAs")] uint64 ActiveSA;
  [read,WmiDataId(2),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of IPSEC key operations in progress")] uint64 PendingKeyOperations;
  [read,WmiDataId(3),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The total number of successful IPSEC SA negotiations")] uint64 KeyAdditions;
  [read,WmiDataId(4),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The total number of key deletions for IPSEC SA")] uint64 KeyDeletions;
  [read,WmiDataId(5),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of rekey operations for IPSEC SAs.")] uint64 ReKeys;
  [read,WmiDataId(6),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of active IPSEC tunnels.")] uint64 ActiveTunnels;
  [read,WmiDataId(7),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The total number of packets for which the Security Parameters Index (SPI) was incorrect.")] uint64 BadSPIPackets;
  [read,WmiDataId(8),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The total number of packets that failed decryption.")] uint64 PacketsNotDecrypted;
  [read,WmiDataId(9),CounterType(65792),DefaultScale(0),PerfDetail(100),cpp_quote("// The total number of packets for which data could not be verified. ")] uint64 PacketsNotAuthenticated;
  [read,WmiDataId(10),CounterType(272696576),DefaultScale(0),PerfDetail(100),cpp_quote("// The total number of packets that contained a valid Sequence Number field.")] uint64 PacketsWithReplayDetection;
  [read,WmiDataId(11),CounterType(272696576),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of bytes sent using the ESP protocol.")] uint64 ConfidentialBytesSent;
  [read,WmiDataId(12),CounterType(272696576),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of bytes received using the ESP protocol.")] uint64 ConfidentialBytesReceived;
  [read,WmiDataId(13),CounterType(272696576),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of bytes sent using the AH protocol.")] uint64 AuthenticatedBytesSent;
  [read,WmiDataId(14),CounterType(272696576),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of bytes received using the AH protocol.")] uint64 AuthenticatedBytesReceived;
  [read,WmiDataId(15),CounterType(272696576),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of bytes sent using the IPSEC protocol.")] uint64 TransportBytesSent;
  [read,WmiDataId(16),CounterType(272696576),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of bytes received using the IPSEC protocol.")] uint64 TransportBytesReceived;
  [read,WmiDataId(17),CounterType(272696576),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of bytes sent using the IPSEC tunnel mode.")] uint64 TunnelBytesSent;
  [read,WmiDataId(18),CounterType(272696576),DefaultScale(0),PerfDetail(100),cpp_quote("// The number of bytes received using the IPSEC tunnel mode.")] uint64 TunnelBytesReceived;
};

[Dynamic,Provider("WMIProv"),WMI,guid("{4AE27CD9-8DFA-4c37-A42C-B88A93E3E521}"),PerfDetail(100),HiPerf,cpp_quote("//\n// This class exposes connection statistics statistics\n//\n// This class must be registered with dynamic instance names using\n// a specific format: \n//\n//       targetname_#:# where the first # is the SID, and the second\n//    # is the CID.\n//\n")] 
class MSiSCSI_ConnectionStatistics : Win32_PerfRawData
{
  [read,key] String InstanceName;
  [read] boolean Active;
  [read,WmiDataId(1),WmiVersion(1),description("Name of the iSCSI Target"),MaxLen(223)] string iSCSIName;
  [read,WmiDataId(2),WmiVersion(1)] uint16 CID;
  [read,WmiDataId(3),WmiVersion(1)] uint64 USID;
  [WmiDataId(4),DisplayInHex] uint64 UniqueAdapterId;
  [WmiDataId(5),PerfDefault,CounterType(272696576),DefaultScale(0),PerfDetail(100),read] uint64 BytesSent;
  [WmiDataId(6),PerfDefault,CounterType(272696576),DefaultScale(0),PerfDetail(100),read] uint64 BytesReceived;
  [WmiDataId(7),PerfDefault,CounterType(272696576),DefaultScale(0),PerfDetail(100),read] uint64 PDUCommandsSent;
  [WmiDataId(8),PerfDefault,CounterType(272696576),DefaultScale(0),PerfDetail(100),read] uint64 PDUResponsesReceived;
};

[Dynamic,Provider("WMIProv"),WMI,guid("{C827993C-6D1F-4194-9B5C-D7C0A5F1CFB7}"),PerfDetail(100),HiPerf,cpp_quote("//\n// This class exposes session statistics\n//\n// This class must be registered with dynamic instance names using\n// a specific format: \n//\n//       targetname_#  where the  # is the SID\n//\n")] 
class MSiSCSI_SessionStatistics : Win32_PerfRawData
{
  [read,key] String InstanceName;
  [read] boolean Active;
  [read,WmiDataId(1),WmiVersion(1),description("Name of the iSCSI Target"),MaxLen(223)] string iSCSIName;
  [read,WmiDataId(2),WmiVersion(1)] uint64 USID;
  [WmiDataId(3),DisplayInHex] uint64 UniqueAdapterId;
  [WmiDataId(4),PerfDefault,CounterType(272696576),DefaultScale(0),PerfDetail(100),read] uint64 BytesSent;
  [WmiDataId(5),PerfDefault,CounterType(272696576),DefaultScale(0),PerfDetail(100),read] uint64 BytesReceived;
  [WmiDataId(6),PerfDefault,CounterType(272696576),DefaultScale(0),PerfDetail(100),read] uint64 PDUCommandsSent;
  [WmiDataId(7),PerfDefault,CounterType(272696576),DefaultScale(0),PerfDetail(100),read] uint64 PDUResponsesReceived;
  [WmiDataId(8),PerfDefault,CounterType(65792),DefaultScale(0),PerfDetail(100),read] uint64 DigestErrors;
  [WmiDataId(9),PerfDefault,CounterType(65792),DefaultScale(0),PerfDetail(100),read] uint64 ConnectionTimeoutErrors;
  [WmiDataId(10),PerfDefault,CounterType(65792),DefaultScale(0),PerfDetail(100),read] uint64 FormatErrors;
};

[Dynamic,Provider("WMIProv"),WMI,guid("{F022F413-3BF5-47ec-A942-33B81CF8E7FF}"),PerfDetail(100),HiPerf,cpp_quote("//\n// This class exposes login statistics\n//\n// This class must be registered with PDO instance names\n//\n")] 
class MSiSCSI_InitiatorLoginStatistics : Win32_PerfRawData
{
  [read,key] String InstanceName;
  [read] boolean Active;
  [WmiDataId(1),DisplayInHex] uint64 UniqueAdapterId;
  [WmiDataId(2),PerfDefault,CounterType(65536),DefaultScale(0),PerfDetail(100),read] uint32 LoginAcceptRsps;
  [WmiDataId(3),CounterType(65536),PerfDefault,DefaultScale(0),PerfDetail(100),read] uint32 LoginOtherFailRsps;
  [WmiDataId(4),PerfDefault,CounterType(65536),DefaultScale(0),PerfDetail(100),read] uint32 LoginRedirectRsps;
  [WmiDataId(5),PerfDefault,CounterType(65536),DefaultScale(0),PerfDetail(100),read] uint32 LoginAuthFailRsps;
  [WmiDataId(6),PerfDefault,CounterType(65536),DefaultScale(0),PerfDetail(100),read] uint32 LoginAuthenticateFails;
  [WmiDataId(7),PerfDefault,CounterType(65536),DefaultScale(0),PerfDetail(100),read] uint32 LoginNegotiateFails;
  [WmiDataId(8),PerfDefault,CounterType(65536),DefaultScale(0),PerfDetail(100),read] uint32 LogoutNormals;
  [WmiDataId(9),PerfDefault,CounterType(65536),DefaultScale(0),PerfDetail(100),read] uint32 LogoutOtherCodes;
  [WmiDataId(10),PerfDefault,CounterType(65536),DefaultScale(0),PerfDetail(100),read] uint32 LoginFailures;
};

[Dynamic,Provider("WMIProv"),WMI,guid("{FA30C290-68DB-430a-AF76-91A2E1C49154}"),PerfDetail(100),HiPerf,cpp_quote("//\n// This class exposes initiator statistics\n//\n// This class must be registered with PDO instance names\n//\n")] 
class MSiSCSI_InitiatorInstanceStatistics : Win32_PerfRawData
{
  [read,key] String InstanceName;
  [read] boolean Active;
  [WmiDataId(1),DisplayInHex] uint64 UniqueAdapterId;
  [WmiDataId(2),PerfDefault,CounterType(65536),DefaultScale(0),PerfDetail(100),read] uint32 SessionDigestErrorCount;
  [WmiDataId(3),PerfDefault,CounterType(65536),DefaultScale(0),PerfDetail(100),read] uint32 SessionConnectionTimeoutErrorCount;
  [WmiDataId(4),PerfDefault,CounterType(65536),DefaultScale(0),PerfDetail(100),read] uint32 SessionFormatErrorCount;
  [WmiDataId(5),PerfDefault,CounterType(65536),DefaultScale(0),PerfDetail(100),read] uint32 SessionFailureCount;
};

[WMI,guid("{5C59FD61-E919-4687-84E2-7200ABE2209B}"),Dynamic,Provider("wmiprov"),PerfDetail(100),HiPerf,cpp_quote("//\n// NIC performance information class, implement one instance for each port on\n// your adapter. \n//\n// This class must be registered with PDO instance names with one instance\n// names for each port\n//\n")] 
class MSiSCSI_NICPerformance : Win32_PerfRawData
{
  [key] string InstanceName;
  boolean Active;
  [read,WmiDataId(1),PerfDefault,CounterType(272696320),DefaultScale(0),PerfDetail(100)] uint32 BytesTransmitted;
  [read,WmiDataId(2),PerfDefault,CounterType(272696320),DefaultScale(0),PerfDetail(100)] uint32 BytesReceived;
  [read,WmiDataId(3),PerfDefault,CounterType(272696320),DefaultScale(0),PerfDetail(100)] uint32 PDUTransmitted;
  [read,WmiDataId(4),PerfDefault,CounterType(272696320),DefaultScale(0),PerfDetail(100)] uint32 PDUReceived;
};

[Dynamic,Provider("WMIProv"),WMI,guid("{E0B40AA8-544B-4d5e-BA60-A03F136DA83D}"),PerfDetail(100),HiPerf,cpp_quote("//\n// This class exposes request processing time statistics\n//\n// This class must be registered with dynamic instance names using\n// a specific format: \n//\n//       targetname_#:# where the first # is the SID, and the second\n//    # is the CID.\n//\n")] 
class MSiSCSI_RequestTimeStatistics : Win32_PerfRawData
{
  [read,key] String InstanceName;
  [read] boolean Active;
  [read,WmiDataId(1),WmiVersion(1),description("Name of the iSCSI Target"),MaxLen(223)] string iSCSIName;
  [read,WmiDataId(2),WmiVersion(1)] uint16 CID;
  [read,WmiDataId(3),WmiVersion(1)] uint64 USID;
  [WmiDataId(4),DisplayInHex] uint64 UniqueAdapterId;
  [WmiDataId(5),PerfDefault,CounterType(272696576),DefaultScale(0),PerfDetail(100),read] uint32 MaximumProcessingTime;
  [WmiDataId(6),PerfDefault,CounterType(272696576),DefaultScale(0),PerfDetail(100),read] uint32 AverageProcessingTime;
};
