ディスクドライブの簡単な分析

DriverEntryでのatapi.sysでScsiPortInitializeを呼び出します。PCIは、8個のPCIバスがあります。各PCIバスScsiPortInitializeの途中でATAPIコントローラを見つけるために使用される、一度AtapiFindCompatiblePciControllerまたはAtapiFindIsaBusControllerと呼ばれます。あなたがHBAを見つけた場合は、オブジェクトを作成するためにScsiPortCreatePortDeviceのSCSI関数を呼び出します。

システムコールは二回AtapiFindCompatiblePciControllerがされ
、それぞれ、各チャンネルのIDEデバイスを見つけるだろうし、AtapiFindDevicesを呼び出し、それぞれ、割り込み14および15に対応し、首相と第二のチャネルを発見されました。

 

どのAtapiFindCompatiblePciControllerは、各PCIの機能を列挙するScsiPortGetBusDataを呼び出します。これは、BaseClassの== 1サブクラス== 1が見つかった場合、即ち、IDEコントローラとして同定。

画像

(図D-1にpci2_2.pdfに要約:IDEコントローラクラスコードのためのプログラミングインタフェースバイトレイアウト)

 

AtapiFindCompatiblePciControllerはIDEデバイスを見つけた場合は、SCSIデバイスを作成するには、ScsiPortCreatePortDeviceを呼び出します。

チャンバーのサポートSCSIコマンドATAPIデバイスなので、このSCSIのSCSIデバイスATAPIコマンドを送信し、その後、解釈によって送信することが可能です。

ScsiPortCreatePortDeviceがIoCreateDeviceを持つオブジェクトを作成し、その後、接続が対象とIoConnectInterrupt総理やデバイスのセカンダリチャンネルによって中断して割り込みコールバック関数ScsiPortIsrに設定されています。

ScsiPortIsrルーチンはDPC、DPCルーチンはその後、SRBブロックを適用します呼び出し、要求がターゲットSCSIデバイスに送信されます。

通話ScsiClassInitializeののDisk.sysでDriverEntry、それが作成されたSCSIデバイスオブジェクトを列挙します。
ScsiClassInitializeはDiskClassFindDevicesを呼び出し、
そしてDiskClassFindDevicesはScsiClassGetCapabilitiesを呼び出します、ScsiClassGetInquiryData、ScsiClassFindUnclaimedDevicesは

、すべての未申請の機器をDiskClassCreateDeviceObject

 

DiskClassCreateDeviceObjectでは、最初のハードディスクオブジェクトのルートディレクトリを作成し、それがHarddisk0 \ \デバイスです。
その後、すぐにScsiClassClaimDeviceを呼び出し
、デバイス\、その後、パーティション0を作成ScsiClassCreateDeviceObject \ Harddisk0 \ partition0では
、その後ScsiClassReadDriveCapacityは、パーティション0デバイスを尋ね呼び出す
パーティションテーブル情報を読み、そしてIoReadPartitionTableを呼び出し、彼はxHalIoReadPartitionTableが達成呼び出している

\デバイスを読み取ることによって、DiskClassCreateDeviceObjectを\ Harddisk0 \ partition0では、パーティションの合計数のうち、MBRの情報、分析をお読みください。
次に順番に各パーティションのデバイスオブジェクトを作成し、例えば、\デバイス\ Harddisk0 \パーティション1は、


DriverEntryはIoRegisterFileSystem関数を呼び出しvfatfs.sys。

ます。https://www.cnblogs.com/fanzi2009/archive/2009/06/03/1495769.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34129145/article/details/94192546