namespace Vanara.PInvoke; public static partial class NdfApi { /// The ATTRIBUTE_TYPE enumeration defines possible values for a helper attribute. // https://docs.microsoft.com/en-us/windows/win32/api/ndattrib/ne-ndattrib-attribute_type typedef enum tagATTRIBUTE_TYPE { AT_INVALID = 0, // AT_BOOLEAN, AT_INT8, AT_UINT8, AT_INT16, AT_UINT16, AT_INT32, AT_UINT32, AT_INT64, AT_UINT64, AT_STRING, AT_GUID, AT_LIFE_TIME, // AT_SOCKADDR, AT_OCTET_STRING } ATTRIBUTE_TYPE; [PInvokeData("ndattrib.h", MSDNShortId = "NE:ndattrib.tagATTRIBUTE_TYPE")] public enum ATTRIBUTE_TYPE { /// /// Value: /// 0 /// An invalid attribute. /// AT_INVALID, /// A true or false value. AT_BOOLEAN, /// An 8-bit signed integer. AT_INT8, /// An 8-bit unsigned integer. AT_UINT8, /// A 16-bit signed integer. AT_INT16, /// A 16-bit unsigned integer. AT_UINT16, /// A 32-bit signed integer. AT_INT32, /// A 32-bit unsigned integer. AT_UINT32, /// A 64-bit signed integer. AT_INT64, /// A 64-bit unsigned integer. AT_UINT64, /// A string. AT_STRING, /// A GUID structure. AT_GUID, /// A LifeTime structure. AT_LIFE_TIME, /// An IPv4 or IPv6 address. AT_SOCKADDR, /// A byte array. AT_OCTET_STRING, } /// A numeric value that provides more information about the problem. [PInvokeData("ndattrib.h", MSDNShortId = "NS:ndattrib.tagRootCauseInfo")] [Flags] public enum RCF : uint { /// /// The root cause corresponds to a leaf in the diagnostics tree. Root causes that are leafs are more likely to be closer to the /// problem that the user is trying to diagnose. /// RCF_ISLEAF = 0x1, /// /// The root cause corresponds to a node with a DIAGNOSIS_STATUS value of DS_CONFIRMED. Problems with confirmed low health are /// more likely to correspond to the problem the user is trying to diagnose. /// RCF_ISCONFIRMED = 0x2, /// The root cause comes from a third-party helper class extension rather than a native Windows helper class. RCF_ISTHIRDPARTY = 0x4, } /// Additional information about the repair. [PInvokeData("ndattrib.h", MSDNShortId = "NS:ndattrib.tagRepairInfo")] [Flags] public enum REPAIR_FLAG : uint { /// /// Indicates that the repair is a workaround for the issue. For example, sometimes resetting a network interface solves intermittent /// problems, but does not directly address a specific issue, so it is considered a workaround. NDF will show non-workarounds to the /// user before workarounds. /// RF_WORKAROUND = 0x20000000, /// Indicates that the repair prompts the user to perform a manual task outside of NDF. RF_USER_ACTION = 0x10000000, /// Indicates that the repair should not be automatically performed. The user is instead prompted to select the repair. RF_USER_CONFIRMATION = 0x8000000, /// /// Indicates that the repair consists of actionable information for the user. Repair and validation sessions do not occur for /// information-only repairs. /// RF_INFORMATION_ONLY = 0x2000000, /// RF_UI_ONLY = 0x1000000, /// RF_SHOW_EVENTS = 0x800000, /// /// Indicates that the repair provides information to the user as well as a help topic. Unlike RF_INFORMATION_ONLY repairs, /// which cannot be validated, this repair can be executed and validated within a diagnostic session. /// RF_VALIDATE_HELPTOPIC = 0x400000, /// /// Indicates that the repair prompts the user to reproduce their problem. At the same time, the helper class may have enabled more /// detailed logging or other background mechanisms to help detect the failure. /// RF_REPRO = 0x200000, /// Indicates that the repair prompts the user to contact their network administrator in order to resolve the problem. RF_CONTACT_ADMIN = 0x20000, /// Reserved for system use. DF_TRACELESS = 0x40000000, /// Reserved for system use. DF_IMPERSONATION = 0x80000000, /// Reserved for system use. RF_RESERVED_LNI = 0x10000, } /// The REPAIR_RISK enumeration specifies whether repair changes are persistent and whether they can be undone. // https://docs.microsoft.com/en-us/windows/win32/api/ndattrib/ne-ndattrib-repair_risk typedef enum // __MIDL___MIDL_itf_ndattrib_0000_0000_0002 { RR_NOROLLBACK = 0, RR_ROLLBACK, RR_NORISK } REPAIR_RISK; [PInvokeData("ndattrib.h", MSDNShortId = "NE:ndattrib.__MIDL___MIDL_itf_ndattrib_0000_0000_0002")] public enum REPAIR_RISK { /// /// Value: /// 0 /// The repair performs persistent changes that cannot be undone. /// RR_NOROLLBACK, /// The repair performs persistent changes that can be undone. RR_ROLLBACK, /// The repair does not perform persistent changes. RR_NORISK, } /// The REPAIR_SCOPE enumeration describes the scope of modification for a given repair. // https://docs.microsoft.com/en-us/windows/win32/api/ndattrib/ne-ndattrib-repair_scope typedef enum tagREPAIR_SCOPE { RS_SYSTEM = 0, // RS_USER, RS_APPLICATION, RS_PROCESS } REPAIR_SCOPE, *PREPAIR_SCOPE; [PInvokeData("ndattrib.h", MSDNShortId = "NE:ndattrib.tagREPAIR_SCOPE")] public enum REPAIR_SCOPE { /// /// Value: /// 0 /// The repair effect is system-wide. /// RS_SYSTEM, /// The repair effect is user-specific. RS_USER, /// The repair effect is application-specific. RS_APPLICATION, /// The repair effect is process-specific. RS_PROCESS, } /// The UI_INFO_TYPE enumeration identifies repairs that perform user interface tasks. // https://docs.microsoft.com/en-us/windows/win32/api/ndattrib/ne-ndattrib-ui_info_type typedef enum // __MIDL___MIDL_itf_ndattrib_0000_0000_0003 { UIT_INVALID = 0, UIT_NONE = 1, UIT_SHELL_COMMAND, UIT_HELP_PANE, UIT_DUI } UI_INFO_TYPE; [PInvokeData("ndattrib.h", MSDNShortId = "NE:ndattrib.__MIDL___MIDL_itf_ndattrib_0000_0000_0003")] public enum UI_INFO_TYPE { /// /// Value: /// 0 /// UIT_INVALID, /// /// Value: /// 1 /// No additional repair interfaces are present. /// UIT_NONE, /// Execute shell command. UIT_SHELL_COMMAND, /// Launch help pane. UIT_HELP_PANE, /// Direct UI. UIT_DUI, } /// /// The WCN_ATTRIBUTE_TYPE enumeration defines the attribute buffer types defined for Wi-Fi Protected Setup. The overall size /// occupied by each attribute buffer includes an additional 4 bytes (2 bytes of ID, 2 bytes of Length). /// // https://docs.microsoft.com/en-us/windows/win32/api/wcntypes/ne-wcntypes-wcn_attribute_type typedef enum tagWCN_ATTRIBUTE_TYPE { // WCN_TYPE_AP_CHANNEL = 0, WCN_TYPE_ASSOCIATION_STATE, WCN_TYPE_AUTHENTICATION_TYPE, WCN_TYPE_AUTHENTICATION_TYPE_FLAGS, // WCN_TYPE_AUTHENTICATOR, WCN_TYPE_CONFIG_METHODS, WCN_TYPE_CONFIGURATION_ERROR, WCN_TYPE_CONFIRMATION_URL4, WCN_TYPE_CONFIRMATION_URL6, // WCN_TYPE_CONNECTION_TYPE, WCN_TYPE_CONNECTION_TYPE_FLAGS, WCN_TYPE_CREDENTIAL, WCN_TYPE_DEVICE_NAME, WCN_TYPE_DEVICE_PASSWORD_ID, // WCN_TYPE_E_HASH1, WCN_TYPE_E_HASH2, WCN_TYPE_E_SNONCE1, WCN_TYPE_E_SNONCE2, WCN_TYPE_ENCRYPTED_SETTINGS, WCN_TYPE_ENCRYPTION_TYPE, // WCN_TYPE_ENCRYPTION_TYPE_FLAGS, WCN_TYPE_ENROLLEE_NONCE, WCN_TYPE_FEATURE_ID, WCN_TYPE_IDENTITY, WCN_TYPE_IDENTITY_PROOF, // WCN_TYPE_KEY_WRAP_AUTHENTICATOR, WCN_TYPE_KEY_IDENTIFIER, WCN_TYPE_MAC_ADDRESS, WCN_TYPE_MANUFACTURER, WCN_TYPE_MESSAGE_TYPE, // WCN_TYPE_MODEL_NAME, WCN_TYPE_MODEL_NUMBER, WCN_TYPE_NETWORK_INDEX, WCN_TYPE_NETWORK_KEY, WCN_TYPE_NETWORK_KEY_INDEX, // WCN_TYPE_NEW_DEVICE_NAME, WCN_TYPE_NEW_PASSWORD, WCN_TYPE_OOB_DEVICE_PASSWORD, WCN_TYPE_OS_VERSION, WCN_TYPE_POWER_LEVEL, // WCN_TYPE_PSK_CURRENT, WCN_TYPE_PSK_MAX, WCN_TYPE_PUBLIC_KEY, WCN_TYPE_RADIO_ENABLED, WCN_TYPE_REBOOT, WCN_TYPE_REGISTRAR_CURRENT, // WCN_TYPE_REGISTRAR_ESTABLISHED, WCN_TYPE_REGISTRAR_LIST, WCN_TYPE_REGISTRAR_MAX, WCN_TYPE_REGISTRAR_NONCE, WCN_TYPE_REQUEST_TYPE, // WCN_TYPE_RESPONSE_TYPE, WCN_TYPE_RF_BANDS, WCN_TYPE_R_HASH1, WCN_TYPE_R_HASH2, WCN_TYPE_R_SNONCE1, WCN_TYPE_R_SNONCE2, // WCN_TYPE_SELECTED_REGISTRAR, WCN_TYPE_SERIAL_NUMBER, WCN_TYPE_WI_FI_PROTECTED_SETUP_STATE, WCN_TYPE_SSID, WCN_TYPE_TOTAL_NETWORKS, // WCN_TYPE_UUID_E, WCN_TYPE_UUID_R, WCN_TYPE_VENDOR_EXTENSION, WCN_TYPE_VERSION, WCN_TYPE_X_509_CERTIFICATE_REQUEST, // WCN_TYPE_X_509_CERTIFICATE, WCN_TYPE_EAP_IDENTITY, WCN_TYPE_MESSAGE_COUNTER, WCN_TYPE_PUBLIC_KEY_HASH, WCN_TYPE_REKEY_KEY, // WCN_TYPE_KEY_LIFETIME, WCN_TYPE_PERMITTED_CONFIG_METHODS, WCN_TYPE_SELECTED_REGISTRAR_CONFIG_METHODS, WCN_TYPE_PRIMARY_DEVICE_TYPE, // WCN_TYPE_SECONDARY_DEVICE_TYPE_LIST, WCN_TYPE_PORTABLE_DEVICE, WCN_TYPE_AP_SETUP_LOCKED, WCN_TYPE_APPLICATION_EXTENSION, // WCN_TYPE_EAP_TYPE, WCN_TYPE_INITIALIZATION_VECTOR, WCN_TYPE_KEY_PROVIDED_AUTOMATICALLY, WCN_TYPE_802_1X_ENABLED, // WCN_TYPE_APPSESSIONKEY, WCN_TYPE_WEPTRANSMITKEY, WCN_TYPE_UUID, WCN_TYPE_PRIMARY_DEVICE_TYPE_CATEGORY, // WCN_TYPE_PRIMARY_DEVICE_TYPE_SUBCATEGORY_OUI, WCN_TYPE_PRIMARY_DEVICE_TYPE_SUBCATEGORY, WCN_TYPE_CURRENT_SSID, WCN_TYPE_BSSID, // WCN_TYPE_DOT11_MAC_ADDRESS, WCN_TYPE_AUTHORIZED_MACS, WCN_TYPE_NETWORK_KEY_SHAREABLE, WCN_TYPE_REQUEST_TO_ENROLL, // WCN_TYPE_REQUESTED_DEVICE_TYPE, WCN_TYPE_SETTINGS_DELAY_TIME, WCN_TYPE_VERSION2, WCN_TYPE_VENDOR_EXTENSION_WFA, // WCN_NUM_ATTRIBUTE_TYPES } WCN_ATTRIBUTE_TYPE; [PInvokeData("wcntypes.h", MSDNShortId = "NE:wcntypes.tagWCN_ATTRIBUTE_TYPE")] public enum WCN_ATTRIBUTE_TYPE { /// /// Value: /// 0 /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method is a value containing /// data that specifies the 802.11 channel the access point is hosting. /// /// WCN_TYPE_AP_CHANNEL, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method is a value containing /// the association state or configuration information defined by WCN_VALUE_TYPE_ASSOCIATION_STATE. /// /// WCN_TYPE_ASSOCIATION_STATE, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method is a value containing /// an authentication type defined by WCN_VALUE_TYPE_AUTHENTICATION_TYPE. /// /// WCN_TYPE_AUTHENTICATION_TYPE, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method is a value containing /// data that specifies the network authentication capabilities of the Enrollee (access point or station) by providing a value /// defined byWCN_VALUE_TYPE_AUTHENTICATION_TYPE /// /// . /// WCN_TYPE_AUTHENTICATION_TYPE_FLAGS, /// /// /// This attribute value indicates that the wszString parameter of the IWCNDevice::GetStringAttribute method is a buffer containing a /// keyed hash of data. /// /// Note Security is handled transparently by Windows. As a result, applications do not need to query or set this attribute. /// WCN_TYPE_AUTHENTICATOR, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method contains values, /// defined by WCN_VALUE_TYPE_CONFIG_METHODS, that specify the configuration methods supported by the Enrollee or Registrar. /// Additionally, access points and stations that support the UPnP Management Interface must also support this attribute, which is /// used to control the configuration methods that are enabled on the access point. /// /// WCN_TYPE_CONFIG_METHODS, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method is a value, defined by /// WCN_VALUE_TYPE_CONFIGURATION_ERROR, that specifies the result of the device attempting to configure itself and associate with the WLAN. /// /// /// If a configuration session fails with the error code WCN_E_CONNECTION_REJECTED, any error code returned by the remote device can /// be obtained by querying this attribute. It is important to note that some devices will return WCN_VALUE_CE_NO_ERROR even if an /// error has occurred. /// /// WCN_TYPE_CONFIGURATION_ERROR, /// /// /// This attribute value indicates that the wszString parameter of the IWCNDevice::GetStringAttribute method is a buffer that /// contains data representing the URL (IPv4 address based) provided by the Registrar to the Enrollee for use in posting confirmation /// once settings have been successfully applied and the network has been joined. This configurationparameter is optional for a /// Registrar, and it is optional for the Enrollee to post to the URL if the Registrar includes it. /// /// Note An Enrollee must not connect to a confirmation URL that is on a different subnet. /// WCN_TYPE_CONFIRMATION_URL4, /// /// /// This attribute value indicates that the wszString parameter of the IWCNDevice::GetStringAttribute method is a buffer that /// contains data representing the URL (IPv6 address based) provided by the Registrar to the Enrollee for use in posting a /// confirmation once settings have been successfully applied and the network has been joined. This configurationparameter is /// optional for a Registrar and it is optional for the Enrollee to post to the URL if the Registrar includes it. /// /// Note The Enrollee must not connect to a confirmation URL that is on a different subnet. /// WCN_TYPE_CONFIRMATION_URL6, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method contains a value, /// defined by WCN_VALUE_TYPE_CONNECTION_TYPE, that specifies the connection capability of the Enrollee. /// /// WCN_TYPE_CONNECTION_TYPE, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method contains a value, /// defined by WCN_VALUE_TYPE_CONNECTION_TYPE, that specifies the connection capability of the Enrollee. /// /// WCN_TYPE_CONNECTION_TYPE_FLAGS, /// /// /// This compound attribute value indicates that the pbBuffer parameter of the IWCNDevice::GetAttribute method contains a single WLAN /// Credential. There can be either multiple Credential attributes for each Network Key, or multiple Network Keys in a single /// Credential attribute, which is accomplished by repeating the Network Key Index and attributes thatfollow it. Generally, multiple /// keys in a single Credential for a single SSID should be used, and multiple Credential attributes for separate SSIDs should be /// used. The following attributes are contained in each instance of Credential: /// /// /// /// WCN_TYPE_AUTHENTICATION_TYPE /// /// /// /// WCN_TYPE_ENCRYPTION_TYPE /// /// /// /// WCN_TYPE_SSID /// /// /// /// WCN_TYPE_NETWORK_INDEX /// /// /// /// /// If an application intends to use the network credential with the WLAN API, it should use IWCNDevice::GetNetworkProfile to get a /// compatible XML network profile directly. /// /// WCN_TYPE_CREDENTIAL, /// /// /// This attribute value indicates that the wszString parameter of the IWCNDevice::GetStringAttribute method is a buffer that /// contains a user-friendly description of the device encoded in UTF-8. Typically, the component would be a unique identifier that /// describes the product in a way that is recognizable to the user. /// /// WCN_TYPE_DEVICE_NAME, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method contains a value, /// defined by WCN VALUE TYPE DEVICE_PASSWORD_ID, that is used to identify a device password. /// /// WCN_TYPE_DEVICE_PASSWORD_ID, /// /// /// This attribute value indicates that the pbBuffer parameter of the IWCNDevice::GetAttribute method contains the HMAC-SHA-256 hash /// of the first half of the device password and the Enrollee’s first secret nonce. Note Security is handled transparently by /// Windows. As a result, applications do not need to query or set this attribute. /// /// WCN_TYPE_E_HASH1, /// /// /// This attribute value indicates that the pbBuffer parameter of the IWCNDevice::GetAttribute method contains the HMAC-SHA-256 hash /// of the second half of the device password, and the Enrollee’s second secret nonce. Note Security is handled transparently /// by Windows. As a result, applications do not need to query or set this attribute. /// /// WCN_TYPE_E_HASH2, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method contains the first /// nonce used by the Enrollee with the first half of the device password. /// /// Note Security is handled transparently by Windows. As a result, applications do not need to query or set this attribute. /// WCN_TYPE_E_SNONCE1, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method contains the second /// nonce used by the Enrollee with the second half of the device password. /// /// Note Security is handled transparently by Windows. As a result, applications do not need to query or set this attribute. /// WCN_TYPE_E_SNONCE2, /// /// /// This attribute value indicates that the pbBuffer parameter of the IWCNDevice::GetAttribute method contains an initialization /// vector (IV) followed by a set of encrypted Wi-Fi Protected Setup TLV attributes. The last attribute in the encrypted set is a Key /// WrapAuthenticator computed according to the procedure described in section 6.5. /// /// Note Security is handled transparently by Windows. As a result, applications do not need to query or set this attribute. /// WCN_TYPE_ENCRYPTED_SETTINGS, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method contains a value, /// defined by WCN_VALUE_TYPE_ENCRYPTION_TYPE, for the Enrollee (AP or station) to use. /// /// WCN_TYPE_ENCRYPTION_TYPE, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method contains a value, /// defined by WCN_VALUE_TYPE_ENCRYPTION_TYPE, for the Enrollee (AP or station) to use. /// /// WCN_TYPE_ENCRYPTION_TYPE_FLAGS, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method contains a randomly /// generated binary value that is created by the Enrollee for setup operations. Note Security is handled transparently by /// Windows. As a result, applications do not need to query or set this attribute. /// /// WCN_TYPE_ENROLLEE_NONCE, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method contains data that /// indicates a particular feature build for an operating system running on the device. The most significant bit of the 4 byte /// integer is reserved, and always set to one. /// /// WCN_TYPE_FEATURE_ID, /// Reserved. Do not use. WCN_TYPE_IDENTITY, /// Reserved. Do not use. WCN_TYPE_IDENTITY_PROOF, /// /// /// This attribute value indicates that the wszString parameter of the IWCNDevice::GetStringAttribute method is a 8 byte buffer /// containing the first 64 bits of the HMAC-SHA-256 computed over the data to be encrypted with the key wrap algorithm. It is /// appended to the end of the ConfigData prior to encryption. Note Security is handled transparently by Windows. As a result, /// applications do not need to query or set this attribute. /// /// WCN_TYPE_KEY_WRAP_AUTHENTICATOR, /// /// /// This attribute value indicates that the wszString parameter of the IWCNDevice::GetAttribute method is a 16 byte buffer containing /// a 128-bit key identifier. If this attribute immediately precedes an Encrypted Data or Authenticator attribute, then the key /// corresponding to the 128-bit identifier should be used to decryptor verify the Data field. /// /// WCN_TYPE_KEY_IDENTIFIER, /// /// /// This attribute value indicates that the pbBuffer parameter of the IWCNDevice::GetAttribute method is a 6 byte buffer containing /// the 48 bit value of the MAC Address. For example: 0x00 0x07 0xE9 0x4C 0xA8 0x1C.This address is supplied by the remote device. /// Some Access Points give the MAC address of their Ethernet interface, in which case, the address cannot be used to locate the AP’s /// wireless radio. If an application needs to locate an AP’s radio, the application should query the WCN_TYPE_BSSID attribute, which /// is populated by Windows and is generally more reliable. /// /// WCN_TYPE_MAC_ADDRESS, /// /// /// This attribute value indicates that the pbBuffer parameter of the IWCNDevice::GetAttribute method is a buffer containing a string /// that identifies the manufacturer of the device. Generally, this field should allow a user to make an association with a device /// with the labeling on thedevice. /// /// WCN_TYPE_MANUFACTURER, /// Reserved. Do not use. WCN_TYPE_MESSAGE_TYPE, /// /// /// This attribute value indicates that the wszString parameter of the IWCNDevice::GetStringAttribute method is a buffer that /// identifies the model of the device. Generally, this field should allow a user to create an association of a device with the /// labeling on the device. /// /// WCN_TYPE_MODEL_NAME, /// /// /// This attribute value indicates that the wszString parameter of the IWCNDevice::GetStringAttribute method is a string containing /// additional descriptive data associated with the device. /// /// WCN_TYPE_MODEL_NUMBER, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method is a 1 byte buffer used /// to get and set network settings for devices that host more than one network. The default value is '1' which refers to the primary /// WLAN network on the device. /// /// WCN_TYPE_NETWORK_INDEX, /// /// /// This attribute value indicates that the wszString parameter of the IWCNDevice::GetStringAttribute method is a buffer containing /// the wireless encryption key to be used by the Enrollee. Note that it is recommended that applications implement /// IWCNDevice::GetNetworkProfileto get network settings in a convenient format that is ready to be used with the WLAN connection and /// profile management APIs. /// /// WCN_TYPE_NETWORK_KEY, /// Reserved. Do not use. WCN_TYPE_NETWORK_KEY_INDEX, /// Reserved. Do not use. WCN_TYPE_NEW_DEVICE_NAME, /// Reserved. Do not use. WCN_TYPE_NEW_PASSWORD, /// Reserved. Do not use. WCN_TYPE_OOB_DEVICE_PASSWORD, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method is a 4 byte buffer that /// contains the operating system version running on the device. The most significant bit of this 4 byte field is reserved, and /// always set to one. /// /// WCN_TYPE_OS_VERSION, /// Reserved. Do not use. WCN_TYPE_POWER_LEVEL, /// Reserved. Do not use. WCN_TYPE_PSK_CURRENT, /// Reserved. Do not use. WCN_TYPE_PSK_MAX, /// /// Reserved. Do not use. We recommend that a shared secret be sent by way of a vendor extension or that you find another way to do cryptography. /// WCN_TYPE_PUBLIC_KEY, /// Reserved. Do not use. WCN_TYPE_RADIO_ENABLED, /// Reserved. Do not use. WCN_TYPE_REBOOT, /// Reserved. Do not use. WCN_TYPE_REGISTRAR_CURRENT, /// Reserved. Do not use. WCN_TYPE_REGISTRAR_ESTABLISHED, /// Reserved. Do not use. WCN_TYPE_REGISTRAR_LIST, /// Reserved. Do not use. WCN_TYPE_REGISTRAR_MAX, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method is a 16 byte buffer /// containing a randomly generated binary value created by the Registrar for setup. Note Security is handled transparently by /// Windows. As a result, applications do not need to query or set this attribute. /// /// WCN_TYPE_REGISTRAR_NONCE, /// Reserved. Do not use. WCN_TYPE_REQUEST_TYPE, /// Reserved. Do not use. WCN_TYPE_RESPONSE_TYPE, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method is an integer value, /// defined by WCN_VALUE_TYPE_RF_BANDS, that indicates which REPAIR_FLAG band is utilized during message exchange, permitting end /// points and proxies to communicate over a consistent radio interface. It may also be used as an optional attribute in a /// WCN_TYPE_CREDENTIAL or WCN_TYPE_ENCRYPTED_SETTINGS to indicate a specific (or group) of REPAIR_FLAG bands to which a setting applies. /// /// WCN_TYPE_RF_BANDS, /// /// /// This attribute value indicates that the wszString parameter of the IWCNDevice::GetStringAttribute method is a 32 byte buffer that /// containing the HMAC-SHA-256 hash of the first half of the device password and the Registrar’s first secret nonce. Note /// Security is handled transparently by Windows. As a result, applications do not need to query or set this attribute. /// /// WCN_TYPE_R_HASH1, /// /// /// This attribute value indicates that the wszString parameter of the IWCNDevice::GetStringAttribute method is a 32 byte buffer /// containing the HMAC-SHA-256 hash of the second half of the device password and the Registrar’s second secret nonce. Note /// Security is handled transparently by Windows. As a result, applications do not need to query or set this attribute. /// /// WCN_TYPE_R_HASH2, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method is a 16 byte buffer /// containing the first nonce used by the Registrar with the first half of the device password. /// /// Note Security is handled transparently by Windows. As a result, applications do not need to query or set this attribute. /// WCN_TYPE_R_SNONCE1, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method is a 16 byte buffer /// containing the second nonce used by the Registrar with the second half of the device password. /// /// Note Security is handled transparently by Windows. As a result, applications do not need to query or set this attribute. /// WCN_TYPE_R_SNONCE2, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method is an integer value, /// defined by WCN_VALUE_TYPE_BOOLEAN, that indicates if a Registrar has been selected by a user and that an Enrollee can proceed /// with setting up an 802.1X uncontrolled data port with the Registrar. /// /// WCN_TYPE_SELECTED_REGISTRAR, /// /// /// This attribute value indicates that the wszString parameter of the IWCNDevice::GetStringAttribute method is a string containing /// the serial number of the Enrollee. /// /// /// Note Not all devices supply a serial number. Some devices return a string of non-numeric characters, and as a result it is /// not always possible to convert this value to a number. /// /// WCN_TYPE_SERIAL_NUMBER, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method an integer value, /// defined by WCN_VALUE_TYPE_WI_FI_PROTECTED_SETUP, that indicates if a device is configured. /// /// WCN_TYPE_WI_FI_PROTECTED_SETUP_STATE, /// /// /// This attribute value indicates that the pbData parameter of the IWCNDevice::GetAttribute method is a buffer, up to 32 bytes in /// size, containing the Service Set Identifier (SSID) or network name. Instead of querying this attribute, it is recommended that /// applications implementIWCNDevice::GetNetworkProfile to retrieve network settings in a convenient format that is ready to be used /// with the WLAN connection and profile management APIs. /// /// WCN_TYPE_SSID, /// Reserved. Do not use. WCN_TYPE_TOTAL_NETWORKS, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method is a 16 byte buffer /// containing the Universally Unique Identifier (UUID) generated by the Enrollee. It uniquely identifies an operational device and /// should survive reboots and resets. The UUID is provided inbinary format. If the device also supports UPnP, then the UUID /// corresponds to the UPnP UUID. /// /// /// Instead of querying this attribute, applications should instead query the WCN_TYPE_UUID attribute, as it is available for both /// enrollees and registrars. WCN_TYPE_UUID_E_ is only available for devices that act as an enrollee. /// /// WCN_TYPE_UUID_E, /// /// /// This attribute value indicates that the pbBuffer parameter of the IWCNDevice::GetAttribute method is a 16 byte buffer containing /// the Universally Unique Identifier (UUID) element generated by the Registrar. It uniquely identifies an operational device and /// should survive reboots and resets. The UUID is provided inbinary format. If the device also supports UPnP, then the UUID /// corresponds to the UPnP UUID. /// /// /// Instead of querying this attribute, applications should instead query the WCN_TYPE_UUID attribute, as it is available for both /// enrollees and registrars. /// /// WCN_TYPE_UUID_R, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetAttribute method is a buffer, up to 1024 bytes /// in size, that permits the use of vendor extensions in the Wi-Fi Protected Setup TLV framework. The Vendor Extension figure /// illustrates the implementation of vendor extensions. Vendor ID is the SMI network management private enterprise code.Instead of /// querying this value, implementation of the IWCNDevice::GetVendorExtension API is recommended for convenience and flexibility /// while accessing the raw vendor extension attribute directly. /// /// WCN_TYPE_VENDOR_EXTENSION, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method is an integer value /// that indicates the Wi-Fi Protected Setup version. The one-byte field is broken into a four-bit major part using the top MSBs and /// four-bit minor part using the LSBs. As an example, version 3.2 would be 0x32. Note Windows will automatically use the /// correct WPS version for each device, so applications are not required to query or set this value. /// /// /// Note When using WPS 2.0, WCN_TYPE_VERSION will always be set to 0x10 and WCN_TYPE_VERSION2 is used instead /// /// WCN_TYPE_VERSION, /// /// /// This attribute value indicates that the pbBuffer parameter of the IWCNDevice::GetAttribute method is a buffer containing an X.509 /// certificate request payload as specified in RFC 2511. /// /// WCN_TYPE_X_509_CERTIFICATE_REQUEST, /// /// /// This attribute value indicates that the pbBuffer parameter of the IWCNDevice::GetAttribute method is a buffer containing an X.509 certificate. /// /// WCN_TYPE_X_509_CERTIFICATE, /// Reserved. Do not use. WCN_TYPE_EAP_IDENTITY, /// Reserved. Do not use. WCN_TYPE_MESSAGE_COUNTER, /// /// /// This attribute value indicates that the wszString parameter of the IWCNDevice::GetStringAttribute method is a 20 byte buffer /// containing the first 160 bits of the SHA-256 hash of a public key. /// /// Note Security is handled transparently by Windows. As a result, applications do not need to query or set this attribute. /// WCN_TYPE_PUBLIC_KEY_HASH, /// Reserved. Do not use. WCN_TYPE_REKEY_KEY, /// Reserved. Do not use. WCN_TYPE_KEY_LIFETIME, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method is an integer defined /// by WCN_VALUE_TYPE_CONFIG_METHODS, that indicates which of the configuration methods supported by the device are enabled. /// /// WCN_TYPE_PERMITTED_CONFIG_METHODS, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method is an integer defined /// by WCN_VALUE_TYPE_CONFIG_METHODS, that is used in Probe Response messages to convey the current supported Config Methods of a /// specific Registrar. /// /// WCN_TYPE_SELECTED_REGISTRAR_CONFIG_METHODS, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method is an 8 byte buffer /// containing values, contained in WCN_VALUE_TYPE_PRIMARY_DEVICE_TYPE, that indicates the primary type of the device. It is /// recommended that applications instead query the WCN_TYPE_PRIMARY_DEVICE_TYPE_CATEGORY, /// WCN_TYPE_PRIMARY_DEVICE_TYPE_SUBCATEGORY_OUI, and WCN_TYPE_PRIMARY_DEVICE_TYPE_SUBCATEGORY attributes as they are more convenient. /// /// WCN_TYPE_PRIMARY_DEVICE_TYPE, /// Reserved. Do not use. WCN_TYPE_SECONDARY_DEVICE_TYPE_LIST, /// Reserved. Do not use. WCN_TYPE_PORTABLE_DEVICE, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method is a buffer containing /// a value, defined by WCN_VALUE_TYPE_BOOLEAN, that indicates if the access point has entered a state in which it will refuse to /// allow an external Registrar to attempt to run the Registration Protocol using the AP’s PIN (with the AP acting as Enrollee). The /// AP should enter this state if it believes a brute force attack is underway against the AP’s PIN. /// /// /// When the AP is in this state, it MUST continue to allow other Enrollees to connect and run the Registration Protocol with any /// external Registrars or the AP’s built-in Registrar (if any). It is only the use of the AP’s PIN for adding external Registrars /// that is disabled in this state. /// /// /// The AP Setup Locked state can be reset to FALSE through an authenticated call to SetAPSettings. APs may provide other /// implementation-specific methods of resetting the AP Setup Locked state as well. /// /// WCN_TYPE_AP_SETUP_LOCKED, /// /// /// This attribute value indicates that the pvBuffer parameter of the IWCNDevice::GetAttribute method is a buffer, up to 512 bytes in /// size, used to pass parameters for enabling applications during the WSC exchange. It is similar to the Vendor Extension attribute /// except that instead of a 3-byte Vendor ID prefixto the Vendor Data field, a 16-byte UUID (as defined in RFC 4122) is used. This /// provides a virtually unlimited application ID space with a regular structure that can be easily mapped onto a generic application /// extension API. Furthermore, the 16-byte UUID value can be used to derive application-specific AMSKs as described in Section 6.3 /// or pass any necessary keying directly. /// /// WCN_TYPE_APPLICATION_EXTENSION, /// Reserved. Do not use. WCN_TYPE_EAP_TYPE, /// Reserved. Do not use. WCN_TYPE_INITIALIZATION_VECTOR, /// Reserved. Do not use. WCN_TYPE_KEY_PROVIDED_AUTOMATICALLY, /// Reserved. Do not use. WCN_TYPE_802_1X_ENABLED, /// /// /// This attribute value represents the buffer, up to 128 bytes in size, containing data that indicates an exchange of application /// specific session keys and, alternatively, may be used /// /// to calculate AMSKs. /// WCN_TYPE_APPSESSIONKEY, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method is a 1 byte buffer /// containing data that identifies the Key Index value used as the Access Point transmit key for WEP configurations. /// /// WCN_TYPE_WEPTRANSMITKEY, /// /// /// This compound attribute indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method is a 16 byte buffer /// that contains data that is always equal to the UUID of the device, regardless if the device is enrollee or registrar. /// (Effectively, merges WCN_TYPE_UUID_E and WCN_TYPE_UUID_R). /// /// WCN_TYPE_UUID, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute is an integer that represents /// the major device category of a WCN device. The major device category is one of the WCN_VALUE_TYPE_DEVICE_TYPE_CATEGORY values. /// /// WCN_TYPE_PRIMARY_DEVICE_TYPE_CATEGORY, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute is an integer that represents /// the OUI that defines the device subcategory of a WCN device. The most common OUI is WCN_VALUE_DT_SUBTYPE_WIFI_OUI which indicates /// that the subcategory is defined by the Wi-Fi Alliance. /// /// WCN_TYPE_PRIMARY_DEVICE_TYPE_SUBCATEGORY_OUI, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute is an integer that represents /// the device subcategory of a WCN device. The subcategory must be interpreted along with the OUI from /// WCN_TYPE_PRIMARY_DEVICE_TYPE_SUBCATEGORY_OUI. For devices using the Wi-Fi Alliance OUI. The subcategory is one of the /// WCN_VALUE_TYPE_DEVICE_TYPE_SUBCATEGORY values. /// /// WCN_TYPE_PRIMARY_DEVICE_TYPE_SUBCATEGORY, /// /// /// This attribute value indicates that the wszString parameter of the IWCNDevice::GetStringAttribute method is buffer, up to 32 /// bytes in size, containing the current SSID of a wireless access point. /// /// WCN_TYPE_CURRENT_SSID, /// Reserved. Do not use. WCN_TYPE_BSSID, /// Reserved. Do not use. WCN_TYPE_DOT11_MAC_ADDRESS, /// /// /// . This attribute value indicates that a registrar is providing a list of MAC addresses that are authorized to start WSC. the /// pbBuffer parameter of the IWCNDevice::GetAttribute method is a 6-30 byte buffer containing the 48 bit value of each MAC Address /// in the list of authorized MACs. For example: 0x00 0x07 0xE9 0x4C 0xA8 0x1C. /// /// Note Only available in Windows 8. /// WCN_TYPE_AUTHORIZED_MACS, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method is a 1 byte buffer used /// to get and set network settings for devices that host more than one network. A value of '1' indicates that the Network Key may be /// shared with other devices. /// /// Note Only available in Windows 8. /// WCN_TYPE_NETWORK_KEY_SHAREABLE, /// Reserved. Do not use. WCN_TYPE_REQUEST_TO_ENROLL, /// Reserved. Do not use. WCN_TYPE_REQUESTED_DEVICE_TYPE, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method is a 1 byte buffer /// indicating the estimated length of time (in seconds) that an access point will require to reconfigure itself and become /// available, or that a device will require to apply settings and connect to a network. /// /// Note Only available in Windows 8. /// WCN_TYPE_SETTINGS_DELAY_TIME, /// /// /// This attribute value indicates that the puInteger parameter of the IWCNDevice::GetIntegerAttribute method is an integer value /// that indicates the Wi-Fi Protected Setup version. The one-byte field is broken into a four-bit major part using the top MSBs and /// four-bit minor part using the LSBs. As an example, version 3.2 would be 0x32. Note Windows will automatically use the /// correct WPS version for each device, so applications are not required to query or set this value. /// /// Note Only available in Windows 8. /// WCN_TYPE_VERSION2, /// /// Reserved. Do not use. /// Note The attributes within the WFA vendor extension may be queried directly. /// WCN_TYPE_VENDOR_EXTENSION_WFA, /// The number of assigned attributes. WCN_NUM_ATTRIBUTE_TYPES, } /// /// The DIAG_SOCKADDR structure stores an Internet Protocol (IP) address for a computer that is participating in a Windows Sockets communication. /// /// This data structure is designed to be used as a SOCKADDR structure. // https://docs.microsoft.com/en-us/windows/win32/api/ndattrib/ns-ndattrib-diag_sockaddr typedef struct tagSOCK_ADDR { USHORT family; // CHAR data[126]; } DIAG_SOCKADDR, *PDIAG_SOCK_ADDR; [PInvokeData("ndattrib.h", MSDNShortId = "NS:ndattrib.tagSOCK_ADDR")] [StructLayout(LayoutKind.Sequential)] public struct DIAG_SOCKADDR { /// /// Type: USHORT /// Socket address group. /// public ADDRESS_FAMILY family; /// /// Type: CHAR[126] /// The maximum size of all the different socket address structures. /// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 126)] public byte[] data; } /// The HELPER_ATTRIBUTE structure contains all NDF supported data types. // https://docs.microsoft.com/en-us/windows/win32/api/ndattrib/ns-ndattrib-helper_attribute typedef struct tagHELPER_ATTRIBUTE { LPWSTR // pwszName; ATTRIBUTE_TYPE type; union { BOOL Boolean; char Char; byte Byte; short Short; WORD Word; int Int; DWORD DWord; LONGLONG // Int64; ULONGLONG UInt64; LPWSTR PWStr; GUID Guid; LIFE_TIME LifeTime; DIAG_SOCKADDR Address; OCTET_STRING OctetString; }; } // HELPER_ATTRIBUTE, *PHELPER_ATTRIBUTE; [PInvokeData("ndattrib.h", MSDNShortId = "NS:ndattrib.tagHELPER_ATTRIBUTE")] [StructLayout(LayoutKind.Sequential)] public struct HELPER_ATTRIBUTE { /// /// Type: [string] LPWSTR /// A pointer to a null-terminated string that contains the name of the attribute. /// [MarshalAs(UnmanagedType.LPWStr)] public string pwszName; /// /// Type: ATTRIBUTE_TYPE /// The type of helper attribute. /// public ATTRIBUTE_TYPE type; /// /// Type: BOOL /// A True or False value. Used when type is AT_BOOLEAN. /// [MarshalAs(UnmanagedType.Bool)] public bool Boolean; /// /// Type: char /// A character value. Used when type is AT_INT8. /// public byte Char; /// /// Type: byte /// A byte value. Used when type is AT_UINT8. /// public byte Byte; /// /// Type: short /// A 16-bit signed value. Used when type is AT_INT16 /// public short Short; /// /// Type: WORD /// A 2-byte unsigned value. Used when type is AT_UINT16. /// public ushort Word; /// /// Type: int /// A 4-byte signed value. Used when type is AT_INT32. /// public int Int; /// /// Type: DWORD /// A 4-byte unsigned value. Used when type is AT_UINT32. /// public uint DWord; /// /// Type: LONGLONG /// A 64-bit signed integer value. Used when type is AT_INT64. /// public long Int64; /// /// Type: ULONGLONG /// A 64-bit unsigned integer value. Used when type is AT_UINT64. /// public ulong UInt64; /// /// Type: LPWSTR /// A null-terminated string value. Used when type is AT_STRING. /// [MarshalAs(UnmanagedType.LPWStr)] public string PWStr; /// /// Type: GUID /// A GUID structure. Used when type is AT_GUID. /// public Guid Guid; /// /// Type: LIFE_TIME /// A LIFE_TIME structure. Used when type is AT_LIFE_TIME. /// public LIFE_TIME LifeTime; /// /// Type: DIAG_SOCKADDR /// An IPv4 or IPv6 address. Used when type is AT_SOCKADDR. /// public DIAG_SOCKADDR Address; /// /// Type: OCTET_STRING /// A byte array for undefined types. Used when type is AT_OCTET_STRING. /// public OCTET_STRING OctetString; } /// The LIFE_TIME structure contains a start time and an end time. // https://docs.microsoft.com/en-us/windows/win32/api/ndattrib/ns-ndattrib-life_time typedef struct tagLIFE_TIME { FILETIME startTime; // FILETIME endTime; } LIFE_TIME, *PLIFE_TIME; [PInvokeData("ndattrib.h", MSDNShortId = "NS:ndattrib.tagLIFE_TIME")] [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public struct LIFE_TIME { /// /// Type: FILETIME /// The time the problem instance began. /// public FILETIME startTime; /// /// Type: FILETIME /// The time the problem instance ended. /// public FILETIME endTime; } /// The OCTET_STRING structure contains a pointer to a string of byte data. // https://docs.microsoft.com/en-us/windows/win32/api/ndattrib/ns-ndattrib-octet_string typedef struct tagOCTET_STRING { DWORD dwLength; // BYTE *lpValue; } OCTET_STRING, *POCTET_STRING; [PInvokeData("ndattrib.h", MSDNShortId = "NS:ndattrib.tagOCTET_STRING")] [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public struct OCTET_STRING { /// /// Type: DWORD /// The length of the data. /// public uint dwLength; /// /// Type: [size_is(dwLength)]BYTE* /// A pointer to the byte array containing the data. /// public IntPtr lpValue; } /// The RepairInfo structure contains data required for a particular repair option. // https://docs.microsoft.com/en-us/windows/win32/api/ndattrib/ns-ndattrib-repairinfo typedef struct tagRepairInfo { GUID guid; LPWSTR // pwszClassName; LPWSTR pwszDescription; DWORD sidType; long cost; ULONG flags; REPAIR_SCOPE scope; REPAIR_RISK risk; UiInfo UiInfo; int // rootCauseIndex; } RepairInfo, *PRepairInfo; [PInvokeData("ndattrib.h", MSDNShortId = "NS:ndattrib.tagRepairInfo")] [StructLayout(LayoutKind.Sequential)] public struct RepairInfo { /// A unique GUID for this repair. public Guid guid; /// A pointer to a null-terminated string that contains the helper class name in a user-friendly way. [MarshalAs(UnmanagedType.LPWStr)] public string pwszClassName; /// A pointer to a null-terminated string that describes the repair in a user friendly way. [MarshalAs(UnmanagedType.LPWStr)] public string pwszDescription; /// One of the WELL_KNOWN_SID_TYPE if the repair requires certain user contexts or privileges. public AdvApi32.WELL_KNOWN_SID_TYPE sidType; /// The number of seconds required to perform the repair. public long cost; /// /// Additional information about the repair. /// /// /// Value /// Meaning /// /// /// RF_WORKAROUND /// /// Indicates that the repair is a workaround for the issue. For example, sometimes resetting a network interface solves intermittent /// problems, but does not directly address a specific issue, so it is considered a workaround. NDF will show non-workarounds to the /// user before workarounds. /// /// /// /// RF_USER_ACTION /// Indicates that the repair prompts the user to perform a manual task outside of NDF. /// /// /// RF_USER_CONFIRMATION /// Indicates that the repair should not be automatically performed. The user is instead prompted to select the repair. /// /// /// RF_INFORMATION_ONLY /// /// Indicates that the repair consists of actionable information for the user. Repair and validation sessions do not occur for /// information-only repairs. /// /// /// /// RF_VALIDATE_HELPTOPIC /// /// Indicates that the repair provides information to the user as well as a help topic. Unlike RF_INFORMATION_ONLY repairs, /// which cannot be validated, this repair can be executed and validated within a diagnostic session. /// /// /// /// RF_REPRO /// /// Indicates that the repair prompts the user to reproduce their problem. At the same time, the helper class may have enabled more /// detailed logging or other background mechanisms to help detect the failure. /// /// /// /// RF_CONTACT_ADMIN /// Indicates that the repair prompts the user to contact their network administrator in order to resolve the problem. /// /// /// RF_RESERVED /// Reserved for system use. /// /// /// RF_RESERVED_CA /// Reserved for system use. /// /// /// RF_RESERVED_LNI /// Reserved for system use. /// /// /// public REPAIR_FLAG flags; /// Reserved for future use. public REPAIR_SCOPE scope; /// Reserved for future use. public REPAIR_RISK risk; /// A UiInfo structure. public UiInfo UiInfo; /// public int rootCauseIndex; } /// Contains detailed repair information that can be used to help resolve the root cause of an incident. // https://docs.microsoft.com/en-us/windows/win32/api/ndattrib/ns-ndattrib-repairinfoex typedef struct tagRepairInfoEx { RepairInfo // repair; USHORT repairRank; } RepairInfoEx, *PRepairInfoEx; [PInvokeData("ndattrib.h", MSDNShortId = "NS:ndattrib.tagRepairInfoEx")] [StructLayout(LayoutKind.Sequential)] public struct RepairInfoEx { /// /// Type: RepairInfo /// The detailed repair information. /// public RepairInfo repair; /// /// Type: USHORT /// /// The rank of the repair, relative to other repairs in the RootCauseInfo structure associated with the incident. A repair with rank /// 1 is expected to be more relevant to the problem and thus will be the first repair to be attempted. The success of any individual /// repair is not guaranteed, regardless of its rank. /// /// public ushort repairRank; } /// Contains detailed information about the root cause of an incident. // https://docs.microsoft.com/en-us/windows/win32/api/ndattrib/ns-ndattrib-rootcauseinfo typedef struct tagRootCauseInfo { LPWSTR // pwszDescription; GUID rootCauseID; DWORD rootCauseFlags; GUID networkInterfaceID; RepairInfoEx *pRepairs; USHORT repairCount; } // RootCauseInfo, *PRootCauseInfo; [PInvokeData("ndattrib.h", MSDNShortId = "NS:ndattrib.tagRootCauseInfo")] [StructLayout(LayoutKind.Sequential)] public struct RootCauseInfo { /// /// Type: LPWSTR /// A string that describes the problem that caused the incident. /// [MarshalAs(UnmanagedType.LPWStr)] public string pwszDescription; /// /// Type: GUID /// The GUID that corresponds to the problem identified. /// public Guid rootCauseID; /// /// Type: DWORD /// A numeric value that provides more information about the problem. /// /// /// Value /// Meaning /// /// /// RCF_ISLEAF 0x1 /// /// The root cause corresponds to a leaf in the diagnostics tree. Root causes that are leafs are more likely to be closer to the /// problem that the user is trying to diagnose. /// /// /// /// RCF_ISCONFIRMED 0x2 /// /// The root cause corresponds to a node with a DIAGNOSIS_STATUS value of DS_CONFIRMED. Problems with confirmed low health are /// more likely to correspond to the problem the user is trying to diagnose. /// /// /// /// RCF_ISTHIRDPARTY 0x4 /// The root cause comes from a third-party helper class extension rather than a native Windows helper class. /// /// /// public RCF rootCauseFlags; /// /// Type: GUID /// /// GUID of the network interface on which the problem occurred. If the problem is not interface-specific, this value is zero (0). /// /// public Guid networkInterfaceID; /// /// Type: RepairInfoEx* /// The repairs that are available to try and fix the problem. /// public IntPtr pRepairs; /// /// Type: USHORT /// The number of repairs available. /// public ushort repairCount; } /// The ShellCommandInfo structure contains data required to launch an additional application for manual repair options. /// /// /// In the case of a manual repair option, the caller can use this structure to call the ShellExecute function to launch an additional /// application that can help the user to repair the problem. /// /// The following verbs are used in connection with pwszOperation. /// /// /// Term /// Description /// /// /// edit /// Launches an editor and opens the document for editing. If pwszFile is not a document file, the function fails. /// /// /// explore /// Explores the folder specified by the pwszFile parameter. /// /// /// find /// Initiates a search starting from the specified directory. /// /// /// open /// Opens the file specified by the pwszFile parameter. The file can be an executable file, a document file, or a folder. /// /// /// print /// /// Prints the document file specified by the pwszFile parameter. If pwszFile is not a document file, the function fails. /// /// /// /// NULL /// Used when other verbs do not apply. /// /// /// // https://docs.microsoft.com/en-us/windows/win32/api/ndattrib/ns-ndattrib-shellcommandinfo typedef struct tagShellCommandInfo { LPWSTR // pwszOperation; LPWSTR pwszFile; LPWSTR pwszParameters; LPWSTR pwszDirectory; ULONG nShowCmd; } ShellCommandInfo, *PShellCommandInfo; [PInvokeData("ndattrib.h", MSDNShortId = "NS:ndattrib.tagShellCommandInfo")] [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public struct ShellCommandInfo { /// /// Type: [string] LPWSTR /// /// A pointer to a null-terminated string that contains the action to be performed. The set of available verbs that specifies the /// action depends on the particular file or folder. Generally, the actions available from an object's shortcut menu are available /// verbs. For more information, see the Remarks section. /// /// [MarshalAs(UnmanagedType.LPWStr)] public string pwszOperation; /// /// Type: [string] LPWSTR /// /// A pointer to a null-terminated string that specifies the file or object on which to execute the specified verb. To specify a /// Shell namespace object, pass the fully qualified parse name. Note that not all verbs are supported on all objects. For example, /// not all document types support the "print" verb. /// /// [MarshalAs(UnmanagedType.LPWStr)] public string pwszFile; /// /// Type: [string] LPWSTR /// /// A pointer to a null-terminated strings that specifies the parameters to be passed to the application, only if the pwszFile /// parameter specifies an executable file. The format of this string is determined by the verb that is to be invoked. If /// pwszFile specifies a document file, pwszParameters should be NULL. /// /// [MarshalAs(UnmanagedType.LPWStr)] public string pwszParameters; /// /// Type: [string] LPWSTR /// A pointer to a null-terminated string that specifies the default directory. /// [MarshalAs(UnmanagedType.LPWStr)] public string pwszDirectory; /// /// Type: ULONG /// /// Flags that specify how an application is to be displayed when it is opened. If pwszFile specifies a document file, the /// flag is simply passed to the associated application. It is up to the application to decide how to handle it. /// /// public ShowWindowCommand nShowCmd; } /// The UiInfo structure is used to display repair messages to the user. // https://docs.microsoft.com/en-us/windows/win32/api/ndattrib/ns-ndattrib-uiinfo typedef struct tagUiInfo { UI_INFO_TYPE type; union { // LPWSTR pwzNull; ShellCommandInfo ShellInfo; LPWSTR pwzHelpUrl; LPWSTR pwzDui; }; } UiInfo, *PUiInfo; [PInvokeData("ndattrib.h", MSDNShortId = "NS:ndattrib.tagUiInfo")] [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] public struct UiInfo { /// /// Type: UI_INFO_TYPE /// The type of user interface (UI) to use. This can be one of the values shown in the following members. /// public UI_INFO_TYPE type; /// /// Type: LPWSTR /// No additional UI is required. Used when type is set to UIT_NONE. /// [MarshalAs(UnmanagedType.LPWStr)] public string pwzNull; /// /// Type: ShellCommandInfo /// Execute a shell command. Used when type is set to UIT_SHELL_COMMAND. /// public ShellCommandInfo ShellInfo; /// /// Type: LPWSTR /// Launches a help pane. Used when type is set to UIT_HELP_PANE. /// [MarshalAs(UnmanagedType.LPWStr)] public string pwzHelpUrl; /// /// Type: LPWSTR /// Use a direct user interface. Used when type is set to UIT_DUI. /// [MarshalAs(UnmanagedType.LPWStr)] public string pwzDui; } }