0

我想知道.Net 框架是如何在幕后实现的。

在 WinApi 中,对 WriteFile (kernel32.DLL) 的调用最终会调用 NtWriteFile (ntdll.dll),而 NtWriteFile (ntdll.dll) 又会调用 KiSystemService,后者将调用处理写入文件的系统调用。

我想了解在 .Net Framework 中调用 File.Write() 时该过程是如何完成的。

.Net Framework 最终会在 kernel32 中调用 WriteFile 吗?

还是跳过 WinApi 并通过调用 KiSystemService 调用系统服务直接开始工作?

非常感谢。

4

1 回答 1

1

File 类中没有 File.Write,所以我假设您在谈论 File.WriteAllBytes,它调用 Win32 WriteFile,正如我从框架的源代码中所理解的那样。

File 类创建一个 FileStream 内部结束以使用私有方法WriteFileNative...

在对传递的参数和异步调用状态进行一些检查后,此方法使用以下代码

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);
    }
}
于 2013-06-23T12:50:02.527 回答