2016-09-10 3 views
3

私はhdd転送モード(dmaまたはpio)を取得して印刷する必要があります。デバイスマネージャー(スクリーンショットの赤い丸)で見つけることができます。 AtaScreenhdd転送モードを取得するには?

ですから、私はprogrammから赤い丸で情報を取得する必要があります。私はwmiクラスを使用しようとしましたが、Win32_DiskDrive、Win32_IDEControllerなどは必要な情報を提供していません。デバイスマネージャからプロパティウィンドウに最も近いのはWin32_IDEController、フィールドWin32_IDEController ["Name"]は文字列ATA Channel 1を返します。

また、私はこのhttps://msdn.microsoft.com/en-us/library/windows/hardware/ff550142(v=vs.85).aspxを見つけましたが、irb.hを使用しています。これはddk(wdk)の一部です。この関数を使用する方法はわかりません。

私はWDKを勉強しています)どの言語のソリューションであれ、プロジェクトではC#を使用していますが、ソリューションが別の言語であれば "DMA"や "PIO"をファイルに書き込むことができますこのソリューションでは、C#から.exeを実行し、ファイルから読み込みます。 C#でのOFCソリューションはもっと評価されます。

+0

あなたは英語版を持っていますか?デバイスマネージャー –

+0

@SimonMourier DeviceManager - > IDE ATA/ATAPIコントローラー - >ドロップダウンでチャンネルのいずれかを右クリックし、 'プロパティー - >詳細プロパティー(2番目のタブ)を選択すると、この情報がどこにあるのかを正確に理解することは難しいです。 Windows 7. – Nikita

+1

STORAGE_ADAPTER_DESCRIPTOR構造(https://msdn.microsoft.com/en-us/library/windows/desktop/ff800832.aspx)からAdapterUsesPioを試したことがありますか?ここでは、http:// pastebin .com/LSHCy08y私はIDEドライブを持っていないのでテストできません。 –

答えて

1

はあなたがからAdapterUsesPioメンバーを使用することができます:あなたがC#でのAutoItを使用したい場合は

Run ("mmc c:\windows\system32\devmgmt.msc") 
    WinWaitActive ("Device Manager") 
    send("{tab}{down}{down}{down}{down}{down}{down}{down}{NUMPADADD}{down}!{enter}") 
    WinWaitActive ("Primary IDE Channel Properties") 
    send("^{tab}") 
    $drivemode = ControlGetText("Primary IDE Channel Properties", "", "Static4") 
    ControlClick("Primary IDE Channel Properties","Cancel","Button6") 
    WinKill ("Device Manager") 

サンプル(別のWindowsバージョンと異なる言語で気をつけ可能) STORAGE_ADAPTER_DESCRIPTOR構造体。ここでのディスクを照会する方法を示し++の例Cは以下のとおりです。

#include "stdafx.h" 

int main() 
{ 
    wchar_t path[1024]; 
    wsprintf(path, L"\\\\?\\C:"); // or L"\\\\.\\PhysicalDrive0" 

    // note we use 0, not GENERIC_READ to avoid the need for admin rights 
    // 0 is ok if you only need to query for characteristics 
    HANDLE device = CreateFile(path, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL); 
    if (device == INVALID_HANDLE_VALUE) 
     return 0; 

    STORAGE_PROPERTY_QUERY query = {}; 
    query.PropertyId = StorageAdapterProperty; 
    query.QueryType = PropertyStandardQuery; 

    STORAGE_ADAPTER_DESCRIPTOR descriptor = {}; 

    DWORD read; 
    if (!DeviceIoControl(device, IOCTL_STORAGE_QUERY_PROPERTY, 
     &query, 
     sizeof(query), 
     &descriptor, 
     sizeof(descriptor), 
     &read, 
     NULL 
     )) 
    { 
     wprintf(L"DeviceIoControl error: %i\n", GetLastError()); 
    } 
    else 
    { 
     wprintf(L"AdapterUsesPio: %i\n", descriptor.AdapterUsesPio); 
    } 

    CloseHandle(device); 
    return 0; 
} 
+0

こんにちは、私は、フォーラム、http://stackoverflow.com/questions/39544994/how-to-get-hdd-ata-standards-from-cにたくさんのgoogle、msdnと質問がある新しいjorneyを始めました。多分あなたは何かを知っていますか? – Nikita

関連する問題