Как вы получаете шину / устройство / функцию PCIe из дескриптора \\. \ SCSI? - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть \\.\SCSI#: дескриптор, созданный с помощью CreateFile().Я знаю, что это указывает на конкретный HBA или (в моем случае) NVMe Controller.У него должна быть шина / устройство / функция, связанная с его перечислением.

До сих пор я пытался выяснить это через wmi, хотя я более чем открыт для решения C через WinApi.(на самом деле предпочел бы решение в C).

Получая объект, используя:

gwmi -namespace root\cimv2 -class Win32_SCSIController  | format-list *

Это приводит к моему устройству NVMe следующим образом:

PSComputerName              : DESK
Status                      : OK
Name                        : Standard NVM Express Controller
StatusInfo                  : 3
__GENUS                     : 2
__CLASS                     : Win32_SCSIController
__SUPERCLASS                : CIM_SCSIController
__DYNASTY                   : CIM_ManagedSystemElement
__RELPATH                   : Win32_SCSIController.DeviceID="PCI\\VEN_1987&DEV_5008&SUBSYS_50081987&REV_01\\4&CB74546&0&00E8"
__PROPERTY_COUNT            : 31
__DERIVATION                : {CIM_SCSIController, CIM_Controller, CIM_LogicalDevice, CIM_LogicalElement...}
__SERVER                    : DESK
__NAMESPACE                 : root\cimv2
__PATH                      : \\DESK\root\cimv2:Win32_SCSIController.DeviceID="PCI\\VEN_1987&DEV_5008&SUBSYS_50081987&REV_01\\4&CB74546&0&00E8"
Availability                : 3
Caption                     : Standard NVM Express Controller
ConfigManagerErrorCode      : 0
ConfigManagerUserConfig     : False
ControllerTimeouts          :
CreationClassName           : Win32_SCSIController
Description                 : Standard NVM Express Controller
DeviceID                    : PCI\VEN_1987&DEV_5008&SUBSYS_50081987&REV_01\4&CB74546&0&00E8
DeviceMap                   :
DriverName                  : stornvme
ErrorCleared                :
ErrorDescription            :
HardwareVersion             :
Index                       :
InstallDate                 :
LastErrorCode               :
Manufacturer                : Standard NVM Express Controller
MaxDataWidth                :
MaxNumberControlled         :
MaxTransferRate             :
PNPDeviceID                 : PCI\VEN_1987&DEV_5008&SUBSYS_50081987&REV_01\4&CB74546&0&00E8
PowerManagementCapabilities :
PowerManagementSupported    :
ProtectionManagement        :
ProtocolSupported           : 2
SystemCreationClassName     : Win32_ComputerSystem
SystemName                  : DESK
TimeOfLastReset             :
Scope                       : System.Management.ManagementScope
Path                        : \\DESK\root\cimv2:Win32_SCSIController.DeviceID="PCI\\VEN_1987&DEV_5008&SUBSYS_50081987&REV_01\\4&CB74546&0&00E8"
Options                     : System.Management.ObjectGetOptions
ClassPath                   : \\DESK\root\cimv2:Win32_SCSIController
Properties                  : {Availability, Caption, ConfigManagerErrorCode, ConfigManagerUserConfig...}
SystemProperties            : {__GENUS, __CLASS, __SUPERCLASS, __DYNASTY...}
Qualifiers                  : {dynamic, Locale, provider, UUID}
Site                        :                     :

Обратите внимание, какИндекс пуст ... Я подумал, что это было бы число в \. \ SCSI #:

Играя немного больше, я могу получить Bus / Device / Function из этого:

$a = gwmi -namespace root\cimv2 -class Win32_PnPEntity -filter "DeviceId='PCI\\VEN_1987&DEV_5008&SUBSYS_50081987&REV_01\\4&CB74546&0&00E8'"

$a.GetDeviceProperties('DEVPKEY_Device_LocationInfo').deviceProperties.Data
PCI bus 5, device 0, function 0

Я также думал о вызове IOCTL_SCSI_GET_ADDRESS для дескриптора \\.\SCSI#:, хотя это не работает (что имеет смысл, поскольку это не дескриптор lun, а скорее контроллер)

Как связать информацию шины / устройства / функции PCIe с ручкой \\.\SCSI#:?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...