裝置讀寫方式

2022-08-17 13:57:24 字數 2582 閱讀 4322

1.緩衝區方式讀寫操作

1.1 readfile 

讀取位元組數:stack->parameters.read.length

輸出緩衝區:pirp->associatedirp.systembuffer

輸出位元組數:pirp->iostatus.information

1.2 writefile

寫入位元組數:stack->parameters.write.length

寫入緩衝區:pirp->associatedirp.systembuffer

返回位元組數:pirp->iostatus.information

1.3 irp_mj_query_information

file_information_class: stack->parameters.queryfile.fileinformation

輸入輸出緩衝區:pirp->associatedirp.systembuffer

返回位元組數:pirp->iostatus.information=stack->parameters.queryfile.length

2.直接方式讀寫操作

2.1 readfile

讀取位元組數:stack->parameters.read.length

輸出緩衝區:mmgetsystemaddressformdlsafe(pirp->mdladdress,normalpagepriority)

輸出位元組數:pirp->iostatus.information

2.2 writefile

寫入位元組數:stack->parameters.write.length

寫入緩衝區:mmgetsystemaddressformdlsafe(pirp->mdladdress,normalpagepriority)

返回位元組數:pirp->iostatus.information

3.其他方式讀寫操作

3.1 readfile

讀取位元組數:stack->parameters.read.length

輸出緩衝區:probeforwrite(pirp->userbuffer)

輸出位元組數:pirp->iostatus.information

3.2 writefile

寫入位元組數:stack->parameters.write.length

寫入緩衝區:probeforread(pirp->userbuffer)

返回位元組數:pirp->iostatus.information

io裝置控制操作

1.緩衝記憶體模式ioctl

輸入緩衝區大小:stack->parameters.deviceiocontrol.inputbufferlength

輸出緩衝區大小:stack->parameters.deviceiocontrol.outputbufferlength

輸入緩衝區:pirp->associatedirp.systembuffer

輸出緩衝區:pirp->associatedirp.systembuffer

2.直接記憶體模式ioctl之method_in_direct 

輸入緩衝區大小:stack->parameters.deviceiocontrol.inputbufferlength

輸出緩衝區大小:stack->parameters.deviceiocontrol.outputbufferlength

輸入緩衝區:mmgetsystemaddressformdlsafe(pirp->mdladdress,normalpagepriority)

輸出緩衝區:pirp->associatedirp.systembuffer

3.直接記憶體模式ioctl之method_out_direct 

輸入緩衝區大小:stack->parameters.deviceiocontrol.inputbufferlength

輸出緩衝區大小:stack->parameters.deviceiocontrol.outputbufferlength

輸入緩衝區:mmgetsystemaddressformdlsafe(pirp->mdladdress,normalpagepriority)

輸出緩衝區:pirp->associatedirp.systembuffer

method_in_direct與method_out_direct區別在於開啟裝置的許可權

1) 唯讀許可權開啟裝置,method_in_direct的ioctl操作成功,而method_out_direct的操作失敗

2) 讀寫許可權開啟裝置,method_in_direct與method_out_direct的ioctl操作都成功

4.其他記憶體模式ioctl

輸入緩衝區大小:stack->parameters.deviceiocontrol.inputbufferlength

輸出緩衝區大小:stack->parameters.deviceiocontrol.outputbufferlength

輸入緩衝區:probeforread(stack->parameters.deviceiocontrol.type3inputbuffer)

輸出緩衝區:probeforwrite(pirp->userbuffer)

裝置讀寫方式 緩衝區方式

1.裝置物件一共有三種讀寫方式 緩衝區方式讀寫 buffered方式 直接方式讀寫 direct方式 neither方式。這三種方式的flags分別對應do buffered io,do direct io,0 在buffered方式中,i o管理器先建立乙個與使用者模式資料緩衝區大小相等的系統緩衝...

驅動開發之 裝置讀寫方式 緩衝區方式

1.裝置物件一共有三種讀寫方式 緩衝區方式讀寫 buffered方式 直接方式讀寫 direct方式 neither方式。這三種方式的flags分別對應do buffered io,do direct io,0 在buffered方式中,i o管理器先建立乙個與使用者模式資料緩衝區大小相等的系統緩衝...

驅動開發之 裝置讀寫方式 緩衝區方式

1.裝置物件一共同擁有三種讀寫方式 緩衝區方式讀寫 buffered方式 直接方式讀寫 direct方式 neither方式。這三種方式的flags分別相應do buffered io,do direct io,0 在buffered方式中。i o管理器先建立乙個與使用者模式資料緩衝區大小相等的系統...