2013-06-23 2 views
0

.Net 프레임 워크가 커튼 뒤에 어떻게 구현되는지 알고 싶습니다..Net Framework 밑줄 구현

WinApi에서 WriteFile (kernel32.DLL)에 대한 호출이 끝나면 파일 쓰기를 처리하는 시스템 호출을 호출하는 KiSystemService를 호출하는 NtWriteFile (ntdll.dll)이 호출됩니다.

.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 Framework가 항상 WinApi를 통과한다고 가정하는 것이 안전합니까? 그 흐름은 항상있을 것입니다 .Net Framework => Windows API => 네이티브 API? – Michael

+0

프레임 워크는 거대합니다. 그렇기 때문에 그것이 안전하다고 말할 수 없습니다. 게다가 프레임 워크가있는 요점은 이러한 세부 사항을 걱정하지 않는 것입니다. 그러나이 링크는 [Framework sources] (http://referencesource.microsoft.com/netframework.aspx)를 가리 킵니다. 당신이 알아야 할 때 당신은 그들을 확인할 수 있습니다. – Steve