기획 연재/ 윈도우즈 XP, 구조와 원리 샅샅탐험. 1부 윈도우즈XP 부팅과정
갖가지 컴퓨터 하드웨어를 팔다리 쓰듯 부리는 것이 운영체제 소프트웨어(Operating System, 이하 OS)다. OS도 유닉스, 리눅스들이 있는 것을 보면 종류도 많다. 그 가운데 미국 마이크로소프트사가 만든 윈도우즈 XP를 손꼽는다.  
1부. 윈도우즈 XP 부팅과정을 알아본다

2001년, 윈도는 컴퓨터 역사 페이지를 한 장 넘겼다. 윈도98에서 윈도XP로 바뀐 것이다. 윈도XP는 얼굴을 찌푸리게 했던 윈도98보다 안정성이 훨씬 좋다. 부리는 재주도 많아졌지만 안정성만큼 중요하겠는가. 그러나 100% 완벽한 사람이 없듯 윈도우즈XP도 골치를 썩인다. 또 윈도98보다 속 알맹이가 복잡한 윈도XP는 말썽을 부렸다 하면 손쓰지 못할 정도다. 윈도우즈XP는 왜 말썽을 부리는가. 윈도우즈XP가 지닌 구조와 원리를 파헤쳐보고 에러 유형을 알아내 보자. 대처법과 예방법도 간략하게 살펴본다.

1부. 윈도우즈XP 부팅의 비밀
2부. 커널과 리소스
3부. 레지스트리
4부. WDM 장치 드라이버
5부. 응용프로그램의 비밀

윈도우즈 XP 작동 구조
PC를 전원을 켜면 몇 초 지나지 않아 윈도우즈 시작음과 함께 윈도우즈 XP 바탕화면이 뜬다. 윈도우즈는 부팅하는 동안 ‘윈도우즈 시작 중’이라는 말만 되풀이할 뿐 어떻게 돌아가고 있는지 보여주지 않는다. 볼 필요 없는 걸까? 어차피 알려줘 봤자 쓸모가 없어서? 그렇지 않다. PC는 전기를 받아 어떻게 깨어나고 윈도우즈는 어떤 구조로 돌아가는지 알아둬야 말썽장이 윈도를 내 맘대로 주무를 수 있다. 시동화면을 벗기로 숨겨진 화면 속으로 넘어가 보자.

사용자 삽입 이미지

사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지
사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지

사용자 삽입 이미지

사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지

자가 진단하는 PC
전원을 켜자마자 PC가 처음으로 하는 일이 무엇일까? 사람이 잠에서 깨어나 기지개를 펴듯 메인보드의 롬(ROM)에 저장된 바이오스(Basic Input Output System) 프로그램을 불러온다. 바이오스는 갖가지 하드웨어 입출력을 제어하는 PC의 가장 기본 프로그램이다. 바이오스는 우선 그래픽카드 정보를 읽고 이것을 화면으로 보여준다.
그런 다음 자기 진단 프로그램인 포스트(POST, power on self test)가 CPU나 메모리 용량, 하드디스크 등을 체크한다. 이 단계에서 문제가 없어야 윈도우즈가 부팅 단계를 제대로 밟는다. 다음으로 바이오스는 하드웨어를 돌리는 소프트웨어 즉 구동 드라이버를 찾는다.
구동 드라이버 파일의 머리부분에 기록된 맨 앞 512바이트에는 ‘MBR(Master Boot Recoder) 영역이 있다. MBR은 선도부장(부트 스트랩 로더 프로그램)과 하드디스크 파티션 구성을 알려주는 네 가지 ‘파티션 테이블’ 정보가 기록되어 있다. 선도부장은 하드디스크에서 잠자던 운영체제를 깨워 바탕화면을 띄우기까지 부팅과정을 이끄는 일을 한다.
바이오스는 선도부장에게 “PC를 켰으니 일을 시작하라. 이제 너에게 모든 권한을 넘기겠다”고 한다. 명령을 받은 선도부장은 파티션 테이블을 참조해서 각 파티션 맨 앞에 있던 행동대원(NT loader)을 부추겨서 윈도우즈 XP 커널을 부른다. 부팅은 이렇게 바이오스, 선도부장인 부트 스트랩 로더, 행동대원인 NT 로더가 함께하는 과정이다.

NT 로더가 윈도우즈XP를 일으키는 핵심
하드디스크에서 곤히 잠자던 커널은 NT 로더가 깨운다. NT 로더는 먼저 boot.ini 파일을 읽어서 윈도우즈가 수행할 장소를 알아둔다. 그 다음 NTDETECT.COM을 불러 PC에 달린 장치를 점검하게 하고 system32 폴더 안에 담긴 ntoskrnl.exe를 깨운다. 이 ntoskrnl.exe가 바로 윈도우즈 커널의 실체다.
윈도우즈 커널은 작업 수행부와 보호막으로 나눈다. 전문용어로 NT 실행부와 HAL(hardware abstraction layer)이다. 보호막은 응용 프로그램이 하드웨어를 직접 조정하는 것을 막는다. 윈도우즈는 보호막에게 장치 드라이버나 갖가지 필요한 파일을 부르게 한다. 그런 다음 winlogon.exe를 작동시켜 로그온 화면을 띄운다. userinit.exe가 이용자 설정을 읽고 로그온이 제대로 되면 explorer.exe를 수행하면서 윈도우즈 바탕화면을 그려낸다. 여기까지가 윈도우즈 XP 부팅 과정이다.

 

 

MBR(Master Boot Record: 마스터 부트 레코드)

마스터 부트 레코드는 Master Boot Record의 약자로 컴퓨터의 전원을 넣고 부팅될 때 디스크에서 제일 처음 읽혀지는 레코드이다.  MBR은 컴퓨터가 켜지는 순간 운영체계가 어떻게 위치해 있는지를 식별하여 컴퓨터의주기억 장치에 적재될 수 있도록 하기 위한 일련의 정보를 말하여 하드디스크나 플로피디스크의 첫 번째 섹터에 저장되어 있다.

MBR은FDISK에 의해 정해지는데 FDISK가 실행되면 운영체제 프로그램(O/S)의 원활한 운영을 설정하기 위해 하드디스크 내의 부트섹터(Boot Sector)라 하는 마스터 부트 레코드(MBR : Master Boot Record)내에 들어있는 정보를 읽고 갱신하는 작업을 수행한다. 이는 주로 디스크의 0트랙 0섹터에 위치하며, 그 내용은 디스크에서 운영체제를 주기억장치로 로드하는 일을 하는 것이다. 따라서 마스터 부트 레코드의 영역은 어떠한 경우라도 변경될 수 없다.

또한 사용자 시스템의 하드디스크상에 있는 마스터 부트 레코드에 문제점이 있는 경우 부팅시 DOS는 자동적으로 C 드라이브내의 첫 번째 파티션 영역을 감지한 다음 "Boot sector Failure"이라는 에러 메시지를 화면에 출력하고 정지한다.(System Down)

마스터 부트 레코드는 해당되는 파티션 영역의 형태와 크기에 관한 정보를 저장하게 되며, 시스템에 지정되어진 파티션 영역으로 부팅을 시킬 것인지의 여부를 처리한다. 이러한 파티션 영역의 현상을 Bootable, 또는 Active 상태라고 하며, 이 영역의 설정은 FDISK상에서 CREAT Patition area를 선택함으로써 만들어 진다. FDISK 프로그램은 내부적으로 몇 가지의 파티션을 제공하며, 용량이 큰 드라이브에 대하여 여러 개의 드라이브 만들 수 있다. 하드디스크를 새로 장착한 시스템에서는 바로 FDISK를 이용하며 파티션 작업을 진행하며, 이미 하드디스크를 사용중이라면 기존에 있는 non-DOS 파티션, 확장 도스 파티션 영역에 있는 논리 드라이브 제거, 확장 MS-DOS 파티션 및 기본 MS-DOS 파티션을 제거한 후 사용한다. 하드디스크의 파티션 작업을 위해 DOS에서는 FDISK.COM이라는 파일을 지원한다. 이 외에 여러가지 유틸리티 프로그램이 있다. FDISK는 DOS의 디스켓에 있으므로 이를 A 드라이브에 넣고 다음과 같이 입력한다.

=========================================================================================

 

우리가 컴퓨터에 처음 전원을 넣을때 모니터 화면에 제일 먼저 나오는 화면은 그래픽 카드의 제조회사명과 제품명,메모리 용량 등등입니다.
그리고 그다음에 바이오스(BIOS)의 회사명과 버전넘버가 나옵니다...

컴퓨터에 전원이 들어가는 순간 제일 먼저 반응하는 것은 역시그래픽 카드 입니다. 이것은 컴퓨터에서 일어나는 무엇을 볼수 있는 것이 모니터의 출력이기 때문입니다.

그러고 나면BIOS(Basic Input/Output System)가 제어권을 가집니다. 예전 도스시절에만 해도 1M 메모리의 바이오스가 대부분이었는데. 요즘은 거의 2M 메모리의 바이오스를 씁니다.

바이오스의 대표적인 회사는에는  Award,Ami,Peonix가 있습니다. 현재는 어워드랑 피닉스는 합쳐졌습니다.

바이오스는 제일먼저POST라는 것을 실행합니다. 포스트라는 것은 "Power On Self Test" 의 약자로서. 파워가 들어오고 난 후  자동으로 컴퓨터의하드웨어에 관해 테스트하는 겁니다. 즉 하드웨어를 깨우는 것입니다.

제일 먼저메모리체크를 합니다.(화면에 메모리 숫자 막 올라가는게 바로 이겁니다. 이것은 메모리가 이상없이 제대루 있나 보는거 밖에 안됩니다.)

그 다음에입출력 장치에 관해 체크합니다. 컴에 파워을 켠 후에 씨디롬에 불 깜박이고, 플로피 드라이브에 불 들어 오고 하는 것들입니다.

바이오스는 여기저기 신호 보내보고시모스에 저장된 값과 같은지 확인을 하게 됩니다.이상이 없으면 바이오스는 자신의 정보를(1-2M 정도) 메모리에 로딩합니다.
(이상이 있을때는삑-,삑- 하는 그런경고음을 보내고 부팅을 중지합니다. 경고음의 형태나 횟수에 따라 어디서 생긴 오류인지 알수 있습니다. 자세한 내용은 메인보드의 메뉴얼에 보면 자세히 나옵니다.)
그런 다음에 지정해준 부팅 순서대로 해당 드라이브의 mbr 영역에서 부팅관련 파일을 찾습니다...

여기서 mbr에 대해서 조금 설명을 드리면,하드디스크든 플로피 디스크든 운영체제에서 이걸 어떤식으로 사용할지 결정하는 것이 fdisk 와 format 입니다.

MS 계열의 모든 운영체제에선 하드를 동심원의 형태로 우선 영역을 나눕니다. 요즘 하드들은 대개 1면당 1024 개의 실린더를 가집니다... 즉  원판 한 면을 1024개의 동심원으로 쪼갠다는 겁니다.

참고로...fdisk 로 파티션을 나누는건 실린더수를 기준으로 합니다...

그래서 우리가 10기가 중 3기가를 정확히 자를려고 해도 정확히 되지 않습니다.  3기가의 영역이 실린더 하나를 넘어버리거나 모자라거나 하면 제일 가까운 실린더를 경계로 합니다.그런다음 동심원들을 방사형으로 짜릅니다.이것이 트랙입니다.그리고 또 한 트랙을 섹터수만큼 쪼갭니다.

가령 하드케이스에 C/H/S = 1024/64/512 라고 되어있으면. 이것은 실린더가 총 1024개... 헤드가 64개. 그리고 트랙당 섹터수가 512 개라는 얘깁니다

보통 1 섹터는 1024 바이트를 가집니다... 정확히 1K byte 입니다... 0번 실린더의 0번 트랙을 mbr 영역이라고 합니다... 하드디스크의 0번 실린더는 데이타용으론 사용되지 않습니다...
그부분엔 mbr 과 fat ,폴더트리 등등이 있습니다...

그래서 모든 운영체제들은 이 부분에 부팅과 관련한 정보를 담습니다. 그런데 크기가 1K 밖에 되지 않기 때문에 윈도2000의 커널과 같은 큰 용량의 데이타를 담진 못합니다.그래서  이곳에 커널이 어디에 있다는 정보를 기록해 둡니다.
그게 바로부팅매니저입니다...

그래서 최종적으로 바이오스가 부팅매니저를 로딩하고 나면 제어권을 부팅 매니저에게 넘겨줍니다.. 그리고 바이오스의 일은 끝납니다...

그다음부턴 부팅매니저가 부팅순서에 따라 해당 운영체제를 로딩하게 되는 것입니다... 

 

1. MBR과 Boot Sector

디스크의 첫번째 섹터를 부트섹터라고 합니다. 디스크의 첫번째(?) 섹터를 말합니다. 크기는 512Byte 입니다.

위에서 "첫번째" 라고 해 놓고선 ? 를 붙였습니다. 왜냐하면, 하드디스크는 파티션을 나눌 수 있습니다. 또나뉜 파티션에 관한 디스크 정보 등도 기록해야 하고요. 따라서 관련 정보를 기록해 둘 섹터가 하나 필요합니다.그런데 하드디스크의 특성 상 이 정보는 부트 섹터 보다 먼저 놓이게 됩니다. 이것을 "마스터 부트 레코드(MBR)"이라고 합니다. 이것 역시 크기는 512Byte 입니다.

 

디스크의 첫번째 섹터는 실제로는 파티션 정보 등이 기록된 MBR 이지만, 통상 첫번째 섹터라고 하면 두 번째 섹터인 부트섹터(Boot Sector)를 말합니다. 리눅스나 OS/2 등 여타의 운영체제와 멀티부팅을 할 일이 없다거나 하는 경우 MBR을 굳이 알 필요는 없다.

 

2. Fdisk/mbr

Fdisk/mbr 명령을 내리면 부트 섹터를 완전히 지우는 것이 아니라 리눅스 관련 정보를 지우는 것입니다. 그래서 윈도우로 부팅되는 겁니다.

그리고, Grub 이나 Lilo는 MBR에 설치되는 것이 아니라 쉽게 말하면 "표시" 가 되어 있는 겁니다. 즉, 컴퓨터를 켜면 마스터 부트 레코드를 읽을 때 Grub 또는 Lilo가 설치된 곳을 읽도록 표시를 해 놓은 것이죠.

======================================================================================

마스터부트영역의 구조와 FDISK/MBR에 대한 설명

≫ MBR이란?

MBR이란 하드디스크로 부팅하기위한 정보와 파티션 분할 정보 부팅에 사용되는 실제 파티션 (ACTIVE PARTITION)에 대한 정보가 저장된 곳으로 하드디스크의 제일 바깥쪽에 위치한 공간으로(절대섹터0(Cylinder 0, Head 0, Sector 1), 크기:1sector(512byte)) 하드 디스크로 들어오는 관문이 되는 곳이다.

 

≫ MBR이 하는 일

1. 부트파티션(active partition)을 파티션 테이블에서 찾는다.
2. 부트파티션의 시작섹터를 찾는다.
3. 부트파티션내의 부트섹터(boot record)복사본을 메모리로 로드시킨다.
4. 부트섹터의 실행코드의 전송을 중간에서 콘트롤한다.

만일 MBR이 위의 기능들을 완전히 끝마치지 못하면 다음 중 하나의 메세지를 화면에 표시하고 시스템이 정지하게 된다.
Invalid partition table.
Error loading operating system.
Missing operating system.

※ 플로피디스크나 LS-120, Zip 디스크 등은 MBR이 존재하지 않는다. 위의 이동식 저장매체의 첫번째 섹터는 부트섹터 부터 시작한다.

※ 하드디스크가 두개이상 정착된 시스템에서 모든 하드디스크에 MBR이 존재하지만 실행영역으로 지정된 파티션 (active partition)이 포함된 하드디스크의 MBR만 사용된다.

 

≫ MBR의 구조와 내용

다음은 윈도우98,ME에서 사용되는 표준MBR코드의 내용이다.

실행코드영역(excutable area, 271byte)
:하드디스크로 부팅하기 위해 필요한 어셈블러 명령어들로 구성되어 있다.

에러메세지(error message, 80byte)
:하드디스크의 부팅이 실패했을 때 보여줄 메시지들이들어 있는 곳.

예비공간(미래를 위해 남겨둔 공간)
:기본적으로는 사용되지 않으나 일부 프로그램들은 이 영역을 사용하기도 한다.

실행코드(excutable code)
:MS사가 실행코드 7byte를 이곳에 쓰게 했는데 아직 정확한 이유를 밝히고 있지 않다.

파티션테이블(partition table, 64KByte)
:하드디스크내의 기본영역과 확장영역에 관련된 용량,위치 등의 정보와 부팅 가능한 파티션 설정에 대한 정보가 담겨 있다.

매직넘버(magic number)
:내용의 끝을 알리는 표시.

 

≫ FDISK /MBR 명령이 하는 일

FDISK /MBR 명령명령을 실행하면 MBR영역중 파티션테이블64Byte를 제외한 MBR영역 전체를 FDISK가 다시 기록해 준다.
이명령은 파티션테이블을 제외한 MBR영역이 손상되었을 때 이를 복구하는 도구로 사용된다.
파티션테이블이 손상되었을 경우는 다른 복구 유틸리티나 디스크에디터를 이용하여 직접 정보를 써 주거나 백업본을 이용하여 복구해야 한다.


참고

LILO 지우기
LILO가 부트섹터에 설치될 때 그것의 백업이 /boot/boot.xxyy로 생깁니다. xxyy는 hex로 그 디바이스의 major 그리고 minor 숫자이다. 그것은 ls -l /dev/device 를 실행하여 확인할 수 있다. 예를 들어, /dev/hda (major 3, minor 0)의 처음 섹터의 숫자들은 /boot/boot.0300에 저장됩니다. 이에 대해 /dev/fd0 상의 LILO가 /boot/boot.0200를 만들고 /dev/sdb3 (major 8, minor 19)가 /boot/boot.0813를 만든다.

이것은 이미 하나가 존재한다면 다시 그 파일을 만들 필요가 없다. /boot/에 있는 백업본들은 항상 어떤 릴로를 설치하기 전에 그 상황을 확인한다.

참고로 다음과 같이 하면 백업된 섹터 이미지를 복원할 수 있다.

# /sbin/lilo -u /dev/hda


만약 Lilo가 /dev/hda에 설치되어 있다면 단지 다음과 같이 해 주면 된다.

1] dd if=/boot/boot.0300 of=/dev/hda bs=446 count=1

또는

cat /boot/boot.0300 > /dev/hda

그러나, 이것은 안전하지 못하다. 원래 파티션 테이블 정보를 복원하게 되기 때문이다.

2] /sbin/lilo -U 또는 lilo -u /dev/hda(MBR이 있는 곳)

3] fdisk /mbr

이것은 도스쉘로부터 실행한다.

만약 리눅스의 루트파티션에 LILo가 설치되어 있다면 어떤 특별한 조치가 필요하진 않는다.
리눅스를 지울 때 이것이 함께 지워진다.

 

 

*녹색은 BIOS 부팅과정,빨간색은 Windows 부팅과정

전원 ON(그래픽카드 작동) -> BIOS 작동 (POST (power on self test) 수행)(메모리칩이나 장치를 초기화 한다)

-> 디스크 탐색(부팅파일을 읽음) -> 하드디스크의 MBR (Master Boot Record)읽음 -> 부트 파티션 탐색 (MBR내부)

-> NTIPL을 읽음 (Initial program loader)(파티션 맨 앞의 10섹터 차지)-> NTldr 실행 ( NT loader) -> boot.ini 읽음

-> NTDETECT.COM 읽음 (접속된 장치를 알아내고 레지스트리 확인 -> ntoskml.exe 실행(커널)

-> 드라이버 읽음 (hal.dll, acpi, pci.sys, isapnp등을 차례로 읽음) -> 로그온 화면 표시 (winlogon.exe)

-> userinit.exe (이용자가 로그온 하면 이용자 정보를 읽는다) 읽음 -> 데스크탑 화면 표시 (explorer.exe 작동)

=========================================================================================부트로더의 역할

프로세서와 보드 초기화: 프로세서마다 필요로 하는 초기화를 수행하고 메모리 컨트롤러의 레지스터를 설정하여 외부 메모리를 접근할 수 있도록 초기화한다. PLL(Phase Locked Loop)을 프로그래밍하여 CPU 클럭을 원하는 속도로 설정하고, UART를 초기화하여 필요한 경우 직렬 포트(serial port)를 통해 메시지를 출력하거나 입력받을 수 있게 한다. 그밖에 프로세서에 연결된 주변 장치의 종류에 따라 다르게 설정해야 하는 레지스터(예를 들어 타이밍이나 버스 폭을 지정하는 레지스터)도 부트로더에서 설정한다.

운영체제을 로드와 실행: EEPROM이나 플래시 메모리, 때로는 IDE 디스크나 CD-ROM, 네트워크를 통해서 운영체제 이미지를 읽어들여 실행한다. 일단 운영체제로 제어권을 넘긴 후에는 부트로더는 더이상 필요하지 않다. 운영체제를 시스템에 덜 의존적으로 만들기 위해 시스템 정보를 자료구조로 만들어 운영체제에 전달하고, 개발자의 필요에 따라 명령행 인자(command line parameter)를 운영체제에 넘길 수 있게 한다.

 GRUB 소개

부트로더란 간단히 말해서 컴퓨터를 켰을 때 가장 먼저 실행되는 프로그램이다. 부트로더는 OS의 커널을 로드하고 몇몇 커널 파라메터를 커널에 넘겨주는 일을 한다. GNU GRUB은 원래 처음에는 GNU Hurd를 위해 개발되었지만 그 막강한 기능 때문에 리눅스에서도 점차 LILO 대신 GRUB을 사용하는 사람들이 늘고 있다. GRUB은 현재 리눅스를 비롯하여 많은 공개 운영체제와 chain-loading을 사용하는 상용 운영체제를 로드할 수 있다.

하드웨어 초기화, 커널을 메모리에 적재.

 

GRUB의 가장 큰 특징은 파일시스템과 커널 포맷을 이해한다는 점이다. 따라서 디스크상에서 커널의 물리적인 위치를 알 필요 없이 단지 파일명과 커널이 위치하고 있는 파티션만 알고 있으면 커널을 로드할 수 있다. LILO의 경우 부트로더가 커널의 하드디스크상의 물리적인 위치를 알고 있어야 한다. 따라서 커널을 다시 설치할 때마다 ‘lilo’를 실행해 부트로더를 다시 심어 주어야 하지만, GRUB의 경우 파일명만 알면 되기 때문에 파일명이 바뀌지 않는 한 다시 실행해 줄 필요가 없다.

    현재 GRUB은 다음과 같은 기능들을 제공한다.

    1. a.out 포맷과 ELF 포맷의 커널을 읽어들일 수 있다.
    2. Linux, FreeBSD, NetBSD, OpenBSD등 비-멀티부트 커널을 지원한다.
    3. 멀티플 모듈을 로드할 수 있다.
    4. 텍스트 형식의 설정 파일을 제공한다.
    5. 메뉴 인터페이스를 제공한다.
    6. 유연한 커맨드라인 인터페이스를 제공한다.
    7. BSD FFS, FAT16, FAT32, Minix, ext2 그리고 ReiserFS 파일시스템을 지원한다.
    8. gzip으로 압축된 파일을 다룰 수 있다.
    9. BIOS에서 인식되는 모든 장치에 엑세스할 수   있다.

 

부팅할 때 읽는 주요 파일

 파일이름  설명
  HAL.DLL   하드웨어 추상화 계층. HAL -> Hardware Abstraction Layer
  acpi.sys   ACPI (Advanced Configuration and Power Interface)드라이버 (전원관리)
  pci.sys   PCI 드라이버
  isapnp.sys   ISA 장치 pnp 드라이버
  intelide.sys   인텔 칩셋용 IDE 드라이버
  atapi.sys   IDE/ATAPI 장치 드라이버
  disk.sys   디스크 드라이버
  fastfat.sys   FAT 파일 시스템 드라이버
  ntfs.sys   NTFS 파일 시스템 드라이버
  usbport.sys   USB 호스트 컨트롤러 드라이버
  flpydisk.sys   FDD 드라이버
  vga.sys   VGA 그래픽 드라이버
  tcpip.sys   TCP/IP 드라이버
  csrss.exe   Client Server Runtime System. Win32 서브 시스템 중심 부분
  setupapi.dll   드라이버를 까는 API
  msgina.dll   이용자 식별, 인식 모듈
  kerberos.dll   네트워크 인증 프로토콜
  winmm.dll   사운드 API
  ws2_32.dll
  mswsock.dll
  윈도우즈 소켓 2 네트워크 프로토콜
  dhcpcsvc.dll   DHCP 클라이언트
  splitter.sys
  swmidi.sys
  dmusic.sys
  다이렉트 X 관련 드라이버
  ntdll.dll   실행부 서비스로 접근하는 것을 돕는다
  kernel32.dll   시스템 서비스를 담당하는 win32 API
  gdi32.dll   그래픽을 담당하는 win32 API
  user32.dll   창 관리자를 호출하는 win32 API
  shell32.dll   윈도우즈 XP의 쉘 실체
  run32.exe   dll 안의 함수를 호출하는 프로그램


Posted by 영웅기삼
,