원문 : http://blogs.msdn.com/ntdebugging/archive/2009/08/27/etw-introduction-and-overview.aspx 소개 윈도우 이벤트 추적기(ETW)는 시스템과 소프트웨어 진단 문제해결 그리고 성능 모니터링을 위한 윈도우즈의 컴포넌트죠. (윈도우 2000 부터 사용되었습니다.) 하지만 윈도우 비스타 이전까지는 메이저 급 컴포넌트는 아니 였습니다. 하지만 윈도우 비스타 부터는 메이저 급 컴포넌트로 급부상 한 것은 물론 이 ETW 추적을 아주 빈번하게 이용하게 돼었습니다. (물론 이전 보다 더 실용적이고, 유용하게 돼었으니깐요…) ETW는 아래를 포함한 여러가지 시나리오에서 유용합니다. - 유저와 관리자 : 시스템을 운영하고, 시스템에 무슨일이 일어나고 있는지 알 수 있습니다. ETW는 OS 내부의 아주 밑단까지도 들여다 볼 수 있는 현재의 도구들 및 기술의 집합체입니다. 2007년 4월 MSDN 메거진에 ETW에 대한 아주 깊은 지식 까지 다루고 있는 좋은 기사(http://msdn.microsoft.com/en-us/magazine/cc163437.aspx )가 있습니다. 한번 읽어 보시길 부탁 드립니다. 아래 ETW의 인프라스트럭처에 대한 Overview 를 보면 어떻게 프로바이더들이 메모리 버퍼의(버퍼들은 메모리의 서큘러 버퍼에 있거나 디스크에 순차적 또는 원형 패션으로 기록됩니다.) 높은 성능을 기록하는지를 알 수 잇습니다. |
원문 : http://blogs.technet.com/markrussinovich/archive/2009/11/03/3291024.aspx 2009년 11월 3일을 마지막으로 시스인터널의 NewSID(Machine Security Indentifire / machine SID 를 변경하는 유틸리티)는 역사의 뒤안길로 사라졌습니다. 전 1997년에 NewSID를 NTSID라는 이름으로 개발했습니다. 그 당시에는 MS의 Sysprep 라는 유일한 SID 변경 툴이 있었지만, 그 마저도 어플리케이션이 설치된 이후에는 쓸 수가 없었습니다. 머신 SID는 Windows 설치 시 생성되는 식별자로써 Windows에서는 관리자가 생성한 로컬 계정과 그룹 SID의 기본값으로 사용하게 됩니다. 사용자가 로그인하게 되면 사용자는 시스템은 사용자 계정의 SID와 그룹 SID를 통해 시스템상의 각종 오브젝트의 접근 권한을 체크합니다. 만약 2개의 머신이 동일한 SID를 가지고 있다면 계정이나 그룹의 SID 역시 동일할것입니다. 이 때문에 동일한 SID를 갖는 다수의 컴퓨터들은 보안상 문제를 야기할 수 있겠죠? 그렇지 않을까요? 이것이 바로 우리가 전부터 알던 지식이였습니다. 사람들은 Windows Vista에서 NewSID를 유용하게 사용한다고 했지만 내 스스로 NewSID를 완벽하게 테스트 하지도 못했고, 종종 NewSID 적용 이후 Windows의 일부 컴포넌트들이 실패를 한다는 애기를 듣고 NewSID를 은퇴시키기로 마음 먹었습니다. 차분하게 않아 레포트를 들어다 보면서 전 모두가 알고있는 “SID가 중복되면 문제가 일어난다” 부터 차분하게 다시 생각하기 시작했습니다. 차분하게 생각하고 생각한 결과 SID 중복은 문제가 아닐 수 있다는 확신을 갖게 되었습니다. 다른 말로 동일한 SID를 갖는 머신들이 있더라도 별 보안상의 문제가 아니라는 것이죠. 전 윈도우 개발팀과 보안팀과 함께 위와 같은 결론을 냈는데, 우리 중 누구도 도메인이나 Workgroup 환경에서 SID 중복이 문제를 일으키는 시나리오에 대한 증명을 하지 못했습니다. 이게 발로 NewSID가 역사의 뒤안길로 사라지게 된 이유입니다. SIDs SID는 가변길의 숫자 값들로 이루어져 있는데, 이는 스트럭처 리비전 번호와 48비트의 아이텐티파이어 오소리티 값 그리고 가변길이의 32비트 서브오소리티값과 RID로구성되어 있습니다. 이 authority 값을 통해 SID를 발급하는 에이전트를 구분하게 됩니다. 이런 에이전트는 일반적으로 윈도우즈의 로컬 시스템이거나 도메인이 됩니다. (역 주 : SID의 앞단의 indetifier authority를 에이전트라고 부르는데, 이값을 기본으로 SID가 구성되게 되기 때문에 에이전트라 하고 있습니다.) 그리고 subauthority 값을 통해 issuing authoriy 와 연관되어 수탁받은 권한들을 확인하며, RID는 윈도우즈에서 base SID를 통해 유니크한 SID를 만드는 간단한 방법을 제공합니다. 여러분은 Sysinternals 의 PsGetSid 툴을 단순히 실행 하는 것만으로 머신의 SID를 확인 할 수 있습니다. 보시면 리비전 넘버가 1번이고 오소리티는 5번 입니다. 그리고 4개로 이루어진 서브오소리티 값들이 있습니다. 중요한 점은 윈도우즈 엔티가 머신의 SID가 네트워크상의 아이덴티피케이션으로 사용될 수 도 있다는 염두를 해 두고 디자인 됐다는 점입니다. 즉 이 아이텐디티의 유일성을 보장하기 위하여 1개의 (21) 고정된 서브오소리티 값과 3개의 렌덤하게 생성된 값이 만들어지게 됩니다. (S-1-5-21 뒤에 나오는 숫자들) 첫번째 유저를 만들지 않았더라도 윈도우즈는 몇개의 빌트인 유저 및 그룹들을 정의해놓고 있는데 이 속에는 administrator 나 Guest 계정들이 포함되어 있습니다. 윈도우즈는 위와 같은 유저들을 위한 렌덤한 SID 생성 대신에 각 유저마다 RID라 불리는 간단한 유니크한 숫자들을 SID에 추가로 붙여 각 계정의 SID의 유일성을 보장하게 됩니다. 위와 같은 유저들은 RID이 이미 정의 되어 있습니다. 예를 들어 Administrator의 경우 RID는 항상 500이 되게 되죠. 설치가 끝난 후 새로운 계정이나 그룹의 RID는 1000부터 시작하게 됩니다. 여러분은 PsGetSid를 통해 특정 계정의 SID를 확인 할 수 있는데, 아래 그림의 Abby 계정(윈도우즈 설치 과정에서 관리자 권한으로 생성한 계정)의 RID는 1000임을 볼 수 있습니다. 추가적으로 윈도우즈가 먼저 정의해놓은 SID들중 RID를 사용하지 않는 녀석들도 있습니다. 예를 들자면 Everyone 그룹이 이에 해당하는데 이 Everyone은 모든 윈도우즈 시스템에서 S-1-1-0의 SID를 갖습니다. 또다른 예로 로컬 시스템 계정 (System) 역시 마찬가지 입니다. (시스템 프로세인 SMSS.exe 나 Services.exe, Winlogon.exe 를 실행 시키는 계정) SIDs and Access Control Lists Local Security Authority Subsystem (LSASS -Lsass.exe) 은 계정이 윈도우에 로그인 할 때 로그온 세션과 토큰을 만듭니다. 이 토큰은 윈도우의 커널 정의한 구조체인데, 이 토큰은 계정과 해당 시점에 인증된 이 계정의 SID 및 해당 시점에 인증된 그룹의 SID 그리고 계정과 그룹 할당된 보안 권한 등을 나타냅니다. 로그온 세션에서 참조하고 있는 마지막 토큰이 삭제되면 LSASS는 로그온 세션을 삭제하고 유저는 로그 오프 한 것으로 추정되게 됩니다. 아래는 시스인터널스의 LogonSession 유틸리티로 본 제 인터렉티브 로그인 세션입니다. 여러분은 아래와 같이 프로세스 익스플로어의 핸들 뷰를 통해 세션을 위해 할당된 토큰을 확인 할 수 있습니다. 계정 명 뒤에 따라오는 번호 (7fdee) 를 기억하시고 이를 LogonSessions의 로그인한 세션의 ID와 맞춰 보시기 바랍니다. 기본적으로 프로세스들은 부모 프로세스의 토큰을 상속 받습니다. 예를 들어 인터렉티브 세션에서 동작하는 모든 프로세스는 Userint.exe 프로세스로(인터렉티브 로그온을 위해서 Winlogon.exe 가 생성한) 부터 상속된 토큰의 카피를 갖게 되는 것이죠. 여러분은 프로세스 익스플러어의 프로세스를 더블 클릭한 화면의 보안 탭을 통해 해당 내용을 확인 할 수 있습니다. 제 프로세스 중 하나가 OS object (파일, 레지스트리키 와 같은) 을 오픈 하면 보안 서브 시스템은 퍼미션 체크를 진행 합니다. 퍼미션 체크란 해당 오브젝트의 엑세스 컨트롤 리스트 (ACL / 프로세스 토큰의 SID를 참조)의 항목들에 대한 내용을 확인 하는 것을 의미합니다. 이와 유사한 확인은 원격 컴퓨터의 공유의 net use 를 통해 생성된 외부 로그온 세션에서도 확인 할 수 있습니다. 공유된 자원을 사용하기 위해서는 해당 외부 시스템이 확인 할 수 있는 계정을 통해 해당 시스템으로 부터 인증을 받아야 합니다. 만약 그 환경이 워크 그룹이라면 여러분은 해당 리모트 (외부) 시스템의 로컬 계정이여야 하고, 만약 도메인 환경이라면 여러분은 해당 리모트 시스템의 로컬 계정이거나 도메인 계정이여야 합니다. 여러분이 공유되어 있는 파일에 접근을 하게 되면 해당 시스템의 파일서버 드라이버는 로그온 세션의 토큰을 이용하여 권한을 확인하게 됩니다. 이런 레버리징 메커니즘을 임퍼스네이션이라고 부릅니다. SID Duplication 마이크로소프트에서 제공하는 유일한 이미지 기반의 윈도우 배포 방법은 이미지로 윈도우를 배포한 후에 Sysprep 툴을 실행 하는 것입니다. 이를 이미지를 제네럴라이징 한다고 부르는데 그 이유는 여러분이 이 이미지로 만들어진 윈도우를 부팅할 때 Sysprep 이 새로운 SID 생성 및 PnP 하드웨어 디텍션, 제품 엑티베이션 클락 리셋, 컴퓨터 이름과 같은 데이터를 설정 진행하기 때문입니다. 어떤 IT 담당자들은 하나의 시스템에 어플리케이션을 설치하고 설정을 변경한 후 SID를 리셋 없이 이에 대한 카피본을 사용하는 경우가 있습니다. 지금까지 가장 좋은 방법은 NewSID와 같은 툴로 SID를 리셋하는 것이였습니다. 이 유틸리티는 새로운 머신 SID를 생성하고 파일 시스템과 레지스트리등의 ACL을 확인하여 모든 SID를 새로운 머신의 SID로 업데이트하는 역활을 했습니다. 마이크로소프트에서 Sysprep와는 다른 이런 방식의 시스템 변경을 지원하지 않았던 이유는 윈도우즈에서 감추고 있는 모든 머신 SID에 대한 참조를 알 수 없었기 때문입니다. 이러한 이유로 새로운 머신 SID와 이전의 변경되지 않는 SID가 공존하는 환경에 대한 안정성 및 보안은 게런티가 될 수 없는거죠… 자 같은 SID를 갖는 다수의 컴퓨터들은 문제가 될까요? 딱 한가지 윈도우들이 다른 컴퓨터의 머신 SID를 참조한다면 문제가 될 수도 있을 것입니다. 예를 들어 만약 여러분이 리모트 시스템에 접근할때 로컬 머신의 SID가 리모트 머신으로 전달 되고 이를 이용하여 권한을 체크한다면 시스템은 외부의 인바운드 계정과 로컬 머신의 같은 SID를 같는 로컬 계정을 구분할 수 없어 문제가 발생 하게 됩니다. (이 양 계정의 SID는 동일한 머신 SID 를 기반으로 동일한 RID를 갖고 있습니다.) 그러나 검토한 결과로는 윈도우즈는 여러분이 자신의 로컬 컴퓨터 만이 확인 할 수 있는 계정을 가지고 다른 컴퓨터로부터 인증을 받는 것을 허용하지 않습니다. 대신에 여러분은 리모트 시스템의 로컬 계정이나 리모트 컴퓨터가 트러스트한 도메인의 도메인 계정의 크리덴셜을 이용하여야 합니다. 리모트 컴퓨터는 SID를 조회하는데 로컬 계정의 경우 Security Accounts Database (SAM) 부터 조회하고, 도메인 계정인 경우 DC의 Active Directory 데이터 베이스로부터 조회합니다. 리모트 컴퓨터는 절대 연결되는 컴퓨터의 머신 SID를 참조 하지 않습니다. 즉 컴퓨터에 엑세스 하는 궁극의 방법은 SID가 아니라 계정 명과 패스워드입니다.. 간단히 말해서 리모트 시스템 계정의 SID를 알아 봤자 컴퓨터나 해당 머신 상의 어떤 자원에 대한 접근도 할 수 없고,. 좀더 들어가 보자면 SID는 충분한 인증 정보가 아닙니다. 기억하겠지만 Built – in 계정의 경우 모든 컴퓨터에서 동일한 SID 값을 갖기 때문에 만약 이게 가능하다면 이것 보안상의 아주 큰 문제가 되는 것이죠. 이전에 제가 언급했던 딱 하나의 예외는 DC들 자신들에 대한 것입니다. 모든 도메인은 도메인 셋업 시 유니크한 도메인 SID를 생성합니다. 그리고 모든 도메인 DC의 머신 SID는 도메인 SID로 매치 되게 됩니다. 이는 어떤 의미에서는 서로의 머신의 SID를 참조하는 것이죠. 이는 모든 도메인의 멤버 컴퓨터의 머신 SID는 DC의 머신 SID나 도메인의 SID와 절대 동일 할 수 없다는 것을 의미합니다. 그러나 각각의 DC 역시 멤버 컴퓨터들 처럼 도메인 내에서 컴퓨터 계정을 지니고 리모트 시스템에 접근할 경우 인증을 받아야 합니다. 몇몇의 SID 중복에 대한 아티클들을 보면 (KB 314828을 포함하여) 동일한 SID를 갖는 다수의 컴퓨터를 사용할 경우에 대한 우려를 제기하고 있습니다. (NTFS-formatted firewire disk와 같은 이동식 미디어의 경우 로컬 계정을 이용하여 Secure 할 수 없는 등의 / 역 주 왜냐하면 이동식 디스크의 ACL의 SID 값이 일부 계정의 경우 동일 하기 때문에 직접 다른 머신의 로컬로 붙을 경우 로컬 계정에 대한 혼선이 있을 수 있습니다.) 하지만 이는 기우에 불과합니다. 왜냐하면 이동식 미디어들은 보안에 대한 고려 자체가 없기 때문입니다. 왜냐하면 자 NTFS를 지원하지 않는 운영체제에서 해당 데이터에 접근한다고 생각합시다. 그 경우 사용자는 아무런 제약 없이 해당 리소스를 접근할 수 있지 않습니까? 게다가 이동식 미디어의 경우 administrators 그룹과 같이 모든 시스템에서 잘 알려진 SID에 대해서는 기본적인 접근 권한을 할당하고 있습니다. 이는 물리 보안과 윈도우즈 7에서 소계된 Bitlocker-to-go(이동식 스토리지의 데이터를 암호화하는)의 기본 개념입니다. 마지막 케이스로 만약 Distributed application 이 머신 SID을 고유 식별자로 사용한다면 문제가 될 수 도 있습니다. (예를 들어 모든 컴퓨터들이 사용하는 어플리케이션인데 이 어플리케이션들을 식별하기 위하여 머신의 SID를 사용하는 경우) 하지만 어떤 마이크로소프트의 소프트웨어도 이런 방식은 사용하지 않으며 머신 SID 역시 이런 일을 위해서 만들어 진 것이 아닙니다. 그리고 동일한 SID를 같은 DC들의 경우에는 이와 같은 경우 아예 제대로 동작하지 않는다고 봐야 합니다. 고유의 컴퓨터 식별자에 기반을 둔 소프트웨어는 컴퓨터의 이름이나 컴퓨터의 도메인 SID들을 이용하게 됩니다. (도메인 상의 컴퓨터 계정의 SID) The New Best Practice SID 중복에 관한 이슈가 꽤 오랫동안 제기 되지 않은 것은 좀 놀랄 만한 사실입니다. 정작 문제는 모든 사람들이 누군가는 정확히 알고 있을 꺼라 생각하고 있었다는 것입니다.. 제가 진짜 억울한 것은 NewSID가 어느짝에도 쓸모가 없었다는 것이고, 그게 바로 NewSID가 역사의 뒤안길을 밟더라도 아쉬워할 일 없다는 것 입니다. 기억하시기 바랍니다. Sysprep는 머신 설정을 재 리셋 해줍니다. (만약 이런 설정들이 중복된다면 WSUS 와 같은 어플리케이션에서는 문제를 일으킬 수 있습니다.) 그래서 마이크로소프트의 지원 정책은 여전히 복제 시스템에서는 Sysprep를 통해 유니크하게 만들어라 입니다. |
너무 좋은 자료를 찾았습니다. Windows가 시작하게 되면 사용자는 세션을 할당 받습니다. WinSta0 스테이션은 Win32k.sys 드라이버를 통해서 호출되게 됩니다. 결론적으로 이 WinSta0 와 Desktop에 대한 이해가 있다면 사용자에 대한 세션 할당에 대해서 조금은 더 알 수 있는 기회가 되지 않을까 합니다. 여기에 대한 아주 좋은 글이 있어서 링크를 슬며시 올립니다. |
입력 파라미터 받기 If (Wscript.Arguments.Count < 1) Then CMD 실행 하기 Dim oShell 배열을 이용하여 파일 읽기 각 항목 저장하기 Set objFSO = CreateObject("Scripting.FileSystemObject") Const ForReading = 1 On Error Resume Next
|
원문 : http://blogs.technet.com/josebda/archive/2009/10/31/scary-sql-server-stuff-tombstones-phantoms-blobs-ghosts-and-zombies.aspx Happy Halloween! 흠하하하하! |
제 블로그 통계를 보니 NTLDR에 대해 궁금해 하는 분들이 꽤 많이 찾아오셨군요. 저번에는 POST 과정과 디스크 초기화 까지 다뤘죠? 원문 : http://blogs.msdn.com/ntdebugging/archive/2007/06/28/how-windows-starts-up-part-the-second.aspx 이번에는 부트 로더 단계에 대해 이야기 하도록 하겠습니다. 이전에 다뤘던 내용을 한번 다시 상기해 보도록 하겠습니다. 먼저 컴퓨터는 POST 과정을 거친 후, MBR 코드를 실행 합니다. 해당 MBR의 활성 파티션을 정보를 확인 한 후 활성 파티션의 부트 섹터 코드를 실행 하고, NTLDR을 메모리에 로드 합니다. 부트 로더 단계는 NTLDR 실행 시 시작하게 됩니다. 1. NTLDR 은 프로세서를 Real mode 에서 32비트 flat memory mode로 변경합니다. NTLDR은 Processor는 Real-Mode로 불리는 x86 실행 모드에서 실행됩니다. Real-Mode 에서는 가상 메모리 주소 변환이 일어나지 않습니다. 이는 모든 메모리 주소가 16bit 세그먼트 및 offset 포맷을 사용함을 의미합니다. 즉 이때는 오직 1MB 의 물리 메모리만이 접근 가능합니다. (16bit 세그먼트 주소 64KB 까지 표현할 수 있는 공간에 추가로 4bit offset이 붙어서 1MB까지 메모리 접근 공간이 확장됨) NTLDR은 이 Real-Mode 에서 Protected-Mode (32bit 메모리 접근 가능)로 CPU를 변환합니다. *Trivia Alert* Protected-Mode로 들어가기전 우리는 A20 라인을 활성화 합니다. (시스템 bus 중 21번째 라인을 말함) IBM 친구들은 제가 무슨 말을 하는지 알 것입니다. 여전히 가상 메모리 주소 변환은 일어나지 않지만, 4GB의 물리 메모리에 대한 접근은 가능합니다. 2. NTLDR은 메모리 접근 및 페이징을 위한 16M 정도의 페이지 테이블을 만듭니다. 3. NTLDR은 페이징을 활성화 합니다. “Protected-Mode with Paging Enabled”는 Windows 가 정상 실행이 가능한 모드입니다. 4. NTLDR은 FAT 와 NTFS 미니 파일 시스템 드라이버를 시작합니다. 이는 부트 섹터의 파일 시스템 코드와는 다른데 NTLDR은 서브 디렉토리까지 읽을 수 있을 정도로 정교한 수준의 드라이버를 제공합니다. Note: NTLDR에서는 IDE 장치만 지원 합니다. 즉 SCSI 장치 등은 지원 하지 않죠. SCSI 장치는 13h 인터럽트가 발생하게 되면 ntbootdd.sys 로드되어 접근이 가능하게 됩니다. ntbootdd.sys는 Windows의 미니 SCSI 포트 드라이버와 같습니다. 5. 만약 Windows 가 부팅되는 것이 아니고 이전의 hibernation 모드에서 살아나는 것이라면 NTLDR은 hibernator file (Hiberfil.sys) 를 찾게 되어 해당 내용을 메모리에 로드 하여 실행하게 됩니다. Hyberbation 파일은 좀 흥미로운데, 일반적으로는 Hybernation이 되는 당시의 메모리 이미지를 갖고 있으나, Hiberfil.sys 다른 위치에 있는 경우 부팅 파티션의 Hiberfil.sys는 ARC Path 즉 진짜 Hybernation 파일의 위치를 가르키는 Path가 기록됩니다. ARC path 는 아래와 같은 Syntaxs를 사용합니다.
6. Hiberfil.sys가 발견되지 않은 경우 NTLDRT은 Boot.ini 단계를 실행합니다. 만약 Boot.ini에 1개 이상의 OS 및 부팅 옵션이 있는 경우 이는 부트 로더 화면에 Display 됩니다. 다음은 Windows 2000서버의 Boot.ini 샘플입니다.
ARC(http://support.microsoft.com/kb/102873) 는 ‘Advanced ROSC Computing’을 의미합니다. “Multi” Syntax는 (IDE 장치에서 유효) Windows 에서 시스템 파일을 로드하려면 컴퓨터 BIOS를 사용해야 함을 나타냅니다. 즉, 운영 체제가 인터럽트(INT) 13 BIOS 호출을 사용하여 Windows NT 부팅에 필요한 NTOSKRNL.EXE 및 다른 파일을 찾고 로드하게 된다는 것을 의미합니다. “SCSI” Syntax는 RISC와 x86 기반 컴퓨터 둘 모두에서 사용되며 Windows의 모든 버전에서 사용됩니다. SCSI() 표기법은 Windows가 부팅 장치 드라이버를 로드하고 해당 드라이버를 사용하여 부팅 파티션에 액세스하는 것을 나타냅니다. x86 기반 컴퓨터에서 사용되는 장치 드라이버는 NTBOOTDD.SYS이며, 이 파일은 시스템 드라이브(일반적으로 C 드라이브)의 루트에 있고 사용 중인 드라이브 컨트롤러용 장치 드라이버의 복사본입니다. “Signature” Syntax는 SCSI 문법과 구문이 동일합니다. 다만 MBR의 Signature 값을 이용하여 OS를 지정한다는 점이 차이 입니다. Signature() 문법은 다음의 조건 중 하나가 존재할 때에만 사용됩니다. - Windows 2000이 설치된 파티션이 ~7.8 GB 보다 크거나 해당 파티션 마지막 실린더 번호가 1024 보다 크고 시스템 BIOS 또는 부트 컨트롤러 BIOS가 INT13 익스텐션을 지원하지 않는 경우 7. 만약 Boot.ini를 찾지 못한 경우 NTLDR은 동일 파티션의 기본 위치 (C:\Windows)에 Windows가 인스톨 되어 있는 것으로 간주하고 부팅 프로세스를 진행합니다. 만약 C:\Windows 디렉토리가 없는 경우 다음과 같은 에러메세지를 화면에 표시 합니다. “Windows could not start because the following file is missing or corrupt: \winnt root\system32\ntoskrnl.exe” 8. 만약 Boot Loader 가 화면에 표시되면 부팅할 OS를 선택하여야 합니다. 9. Ntdetect.com은 모든 지원되는 하드웨어를 Detect 하고 초기화 합니다. Ntdetect.com 은 아래와 같은 모듀을 Detect 합니다.
10. Ntdetect.com 은 로딩된 하드웨어 목록을 NTLDR에 넘깁니다. 11. 만약 /SOS 스위치가 있는 경우 NTLDR은 로드 되는 드라이버들의 이름을 화면에 표시합니다. 단 해당 목록이 초기화 되어 있지는 않습니다. 단지 메모리에 로딩 되었을 뿐입니다. 종종 MUP.sys가 로드된 후 Windows 가 Hang이 걸린다는 애기를 하는데 이는 사실이 아닙니다. 단지 화면의 마지막에 표시되는 모듈일 뿐입니다. 물론 /SOS를 통해 확인 할 수 있는 리스트들은 로딩될 잠제적인 멜웨어등을 확인 하게 해주는 등 매우 유용합니다. 12. NTLDR은 Ntoskrnl.exe 와 Hal.dll를 메모리에 로딩합니다. 다시 한번 강조하지만 로딩이 초기화를 의미 하지 않습니다. 13. NTLDR은 System registry hive를 메모리에 로드합니다. 만약 Windows 가 레지스트리 하이브를 로드하지 못할 경우에는 ERD (긴급 복구용 디스크) 나 윈도우즈 복구 콘솔을 통해 Windows\Repair 또는 Windows\Repair\RegBack 폴더에서 파일을 복구해야 합니다. 14. NTLDR은 HKLM\System\Select 키를 읽습니다. 15. NTLDR 은 현재 사용하고 있는 HKLM\System\Select 키에 Current 값을 셋팅합니다. Note: 이 시점에서 NTLDR이 어떤 ControlSet을 사용할 것인지 판단 됩니다. 그러나 “CurrentControlSet”에 대한 심볼릭 링크를 초기화 전까지는 사실 상 만들어진 것은 아닙니다. (초기화는 커널 부팅 시 일어납니다.) 그래서 전 NTLDR이 사용하기로 한 Controlset을 언급하기 위하여 “Active Control Set” 을 사용하겠습니다. 16. NTLDR은 HKLM\System\*ActiveControlSet*\Control\Nls\Codepage 의 “Acp”, “Oemcp”, 과 “Oemhal” 값을 스켄합니다. 이 엔트트리들은 동일 키단의 언어 정보 테이블을 가르키는 포인터 입니다. 그리고 이 포인터 값을 찾아가 필요한 nls 파일을 로딩합니다. 코드 페이지는 특정 OS나 플랫폼의 문자열 셋입니다. 이 코드 페이지들은 문자들의 문자 코드로 구성되어 있습니다. 17. NTLDR 은 HKLM\System\*ActiveControlSet*\Control\Nls\Language 의 “Default” 값을 스켄합니다. 이 값도 역시 동일키의 언어정보 테이블을 가르키는 포인터 입니다. NTLDR은 해당 파일을 로딩합니다. 기본 값은 L_intl.nls입니다. 18. NTLDR 은 HKLM\System\*ActiveControlSet*\Services 의 “Start” 값이 0x0 디바이스 드라이버를 스켄합니다. 또한 이 드라이버들의 Group 과 Tag 값도 찾습니다. 19 NTLDR 은 HKLM\System\*ActiveControlSet*\Control\ServiceGroupOrder 의 값을 확인하여 반드시 실행 되어야 될 서비스들을 정열합니다. 20. NTLDR은 드라이버들은 Group과 Tag 값으로 정렬합니다. 각각의 서비스나 드라이버는 자신이 속해야할 그룹이 지정되어 있습니다. 모든 드라이버는 Tag로 정렬된 특정 그룹에 속하게 됩니다. 21. NTLDR은 0x0 드라이버를 메모리에 로드 합니다. 22. 자 장기판은 이제 셋팅이 완료 됐습니다. 이제 장기 알들이 나서야 할 차례가 됐습니다. NTLDR은 Ntoskrnl.exe를 실행합니다. |
[현상] [설명] 일시적으로 네트워크 장애가 발생 하는 경우 서버는 끝내 자신의 IP를 IPv4 가 아니라 IPv6로 인식하게 되는 경우가 있다. 이 경우 서버에 DNS 쿼리를 하게 되면 IPv6 주소를 쿼리하게 되고, 이로 인해 장애를 경험하게 된다. |