2013-06-23 39 views
0

我想知道.net框架如何在窗簾後面實現。.Net Framework下劃線實現

在WinApi中,對WriteFile(kernel32.DLL)的調用最終將調用NtWriteFile(ntdll.dll),而該調用將調用KiSystemService來調用處理寫入文件的系統調用。

我想了解在.NET Framework中調用File.Write()時如何完成此過程。

.Net Framework最終是否會在kernel32中調用WriteFile?

還是跳過WinApi並通過調用KiSystemService調用系統服務直接工作?

非常感謝。

回答

1

File類中沒有File.Write,所以我假設你正在談論File.WriteAllBytes,它調用Win32 WriteFile,我可以從框架的源代碼中理解。

File類創建一個內部結束使用私有方法WriteFileNative一個FileStream ...之後傳遞的參數的一些檢查

這種方法和異步調用狀態使用下面的代碼

fixed (byte* numRef = bytes) 
{ 
    if (this._isAsync) 
    { 
     num2 = Win32Native.WriteFile(handle, numRef + offset, count, IntPtr.Zero, overlapped); 
    } 
    else 
    { 
     num2 = Win32Native.WriteFile(handle, numRef + offset, count, out numBytesWritten, IntPtr.Zero); 
    } 
} 
+0

可以肯定的是,.Net框架將永遠經歷WinApi嗎?該流將始終是.Net Framework => Windows Api => Native Api? – Michael

+0

那麼框架是巨大的,所以,不,我不能說它是安全的。此外,有一個框架的關鍵是不用擔心這些細節,但是這個鏈接指向[Framework sources](http://referencesource.microsoft.com/netframework.aspx)。當你需要知道時,你可以檢查它們 – Steve