IOCTL_STORAGE_EJECTION_CONTROL IOCTL (ntddstor.h)

鎖定裝置以防止移除媒體。 如果驅動程式可以在磁碟驅動器正在使用時防止移除媒體,驅動程式會停用或啟用退出媒體的機制,藉此鎖定磁碟驅動器。 呼叫端必須開啟具有FILE_READ_ATTRIBUTES的裝置,才能傳送此要求。

不同於 IOCTL_STORAGE_MEDIA_REMOVAL,驅動程式會依呼叫端追蹤 IOCTL_STORAGE_EJECTION_CONTROL 要求,並忽略未從相同呼叫端收到鎖定要求的解除鎖定要求,進而防止其他呼叫端解除鎖定磁碟驅動器。

卸載式媒體裝置的驅動程式 - 可支援此 IOCTL 必須執行下列動作:

  1. 在裝置物件延伸模組中,保留呼叫端標記的鎖定計數。
  2. 保留每個實體裝置的鎖定計數。
  3. 使用此 IOCTL 呼叫時,如果已設定防止移除媒體的旗標,請遞增計數;如果旗標已清除,且驅動程式先前已從相同的呼叫端收到鎖定要求,請遞減計數。
  4. 除非所有鎖定計數都是零,否則防止移除媒體。
在一般情況下,使用 IOCTL_STORAGE_EJECTION_CONTROL 鎖定裝置的呼叫端,使用 Irp->AssociatedIrp.SystemBuffer 再次傳送IOCTL_STORAGE_EJECTION_CONTROL,將裝置解除鎖定為 FALSE 的布爾值。 不過,有時呼叫端無法正確解除鎖定裝置。

為了確保媒體移除鎖定已正確釋放,類別驅動程式會追蹤使用 IOCTL_STORAGE_EJECTION_CONTROL 鎖定媒體的呼叫端。 如果呼叫端在未解除鎖定裝置的情況下終止,類別驅動程式就會解除鎖定裝置。

主要程序代碼

IRP_MJ_DEVICE_CONTROL

輸入緩衝區

Irp-AssociatedIrp.SystemBuffer> 上的緩衝區包含布爾值,而 TRUE 表示驅動程式應該鎖定磁碟驅動器中的媒體。

輸入緩衝區長度

布爾值的長度。

輸出緩衝區

無。

輸出緩衝區長度

無。

狀態區塊

[資訊] 欄位設定為零。 [ 狀態 ] 欄位會設定為 [STATUS_SUCCESS],或可能設定為 [STATUS_INVALID_DEVICE_REQUEST]、[STATUS_NO_MEDIA_IN_DEVICE] 或 [STATUS_DEVICE_NOT_CONNECTED]。

規格需求

需求
標頭 ntddstor.h (包含 Ntddstor.h)

另請參閱

IOCTL_STORAGE_EJECT_MEDIA