2013-06-23 6 views
0

Я хочу знать, как инфраструктура .Net реализована за шторами..Net framework underline implementation

В WinApi вызов WriteFile (kernel32.DLL) приведет к вызову NtWriteFile (ntdll.dll), который, в свою очередь, вызовет KiSystemService, который вызовет системный вызов, который обрабатывает файлы.

Я хочу понять, как выполняется процесс при вызове File.Write() в .NET Framework.

Является ли .Net Framework в конечном итоге вызовом WriteFile в kernel32?

Или он пропускает WinApi и работает прямо, вызывая системный сервис, вызывая KiSystemService?

Большое спасибо.

ответ

1

Файл File.Write не указан в классе File, поэтому я предполагаю, что вы говорите об File.WriteAllBytes, и он вызывает Win32 WriteFile, как я понимаю из исходного кода Framework.

Класс 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); 
    } 
} 
+0

Можно ли предположить, что .Net Framework всегда будет проходить через WinApi? То, что поток всегда будет .Net Framework => Windows Api => Native Api? – Michael

+0

Ну Рамка огромна, и поэтому я не могу сказать, что это безопасно. Кроме того, весь смысл иметь структуру - не беспокоиться об этих деталях, однако эта ссылка указывает на [Рамочные источники] (http://referencesource.microsoft.com/netframework.aspx). Вы можете проверить их, когда вам нужно знать – Steve