Windows 98®Ö¤ß¤¶²Ð

ùþ·§Æ[

°O±o¦b¦Û¤v¹q¸£¸Ë¤WWindows 95«á,³}®Ñ§½®É§Ú¬Ý¨ì¤FAndrew Schulman

©Ò¼gªºUnauthorized Windows 95 Developer¡¦s Resource Kit,·í®É¹ï¥¦¸Ì­±ªº¤º®e·P¨ì«D±`ªºÅå³Y,¤]«D±`´Ü¨Ø§@ªÌ¹ïWindows§@·~¨t²Î¤F¸Ñ¤§²`,³o¤@°}¤l¦Û¤v¦bWindows 98¤W­±ªº¾Ç²ß¹Lµ{,¤]¦³µÛ¤@ÂI¤ß±o§Æ±æ¥i¥HÂǦ¹¾÷·|¸ò¤j®a¤À¨É¤@¤U,¬Û«H¦b¸g¹L³o¨Ç¹ïWindows 98¨t²Îªº¤¶²Ð¤§«á,¥i¥H¦³³o­Ó¾÷·|ÅýŪªÌ­Ì§ó»{ÃÑ¥¦¤@ÂI,·íµM,Windows 98»PWindows NT©Î¥¼¨Ó±N·|¥X²{ªºWindows 2000(¬[ºc¥ÑNT¦Ó¨Ó)¦b®Ö¤ß¼g§@¤W¬Û®t«D±`¦h,¦]¦¹,³o¦¸¤å³¹©Ò´£ªº¤@¨Ç¹ïWindows 98¹B§@¤è¦¡,¨Ã¤£¾A¥Î©óWindows NT ©Î±N·|¥X²{ªºWindows 2000

 

  ­º¥ý,¥HWnidows 98ªº¬[ºc¨Ó»¡¦p¹Ï(¤@),§Ú§â¥¦µ¹¤À¬°¥|­Ó¼h¦¸,­º¥ý¬O

³Ì¤U¼hVMM32.VXD¤Î¨ä¥¦©ÒLoad¶i¨ÓªºVXD,³o³¡¥÷¬O¦ì©ó¨t²ÎRing 0ªº¦ì¸m,¨ä¤¤³Ì­«­nªº·íµM¬OVMM32.VXD³o­ÓÀɮפF,¥¦¥i»¡¬O¾ã­ÓWindows 98(95)³Ì­«­nªº¤@­ÓRing 0ªº®Ö¤ß,¤£¹L¥¦¨Ã¤£¬O¤@­Ó³æ¯ÂªºVXD,³á¡K.©Î¬OÀ³¸Ó³o¼Ë»¡,¥¦­ÓÀɮ׮榡¨Ã¤£¬O¤@­ÓVXD(LE®æ¦¡),¤£¹L¥¦«o¬O¦h­ÓVXDªº¦XÅé(µy«á±N·|¹ï³o³¡¥÷§@­Ó»¡©ú),¦A¨Ó«K¬O²Ä¤G¼h,³o¤@¼h¤¤ªºkrnl386.exe»P³Ì¤U­±¤@¼hVMM32.VXD¬OÄÝ©óDPMI Client »P DPMI ServerªºÃö«Y,­º¥ýVMM32.VXD·|¦b±Ò°Êªº¹Lµ{¤¤¥h°õ¦ækrnl386.exe(¤£¹L krnl386.exe¬ONE®æ¦¡ªº°õ¦æÀÉ,¤]´N¬O»¡¥¦¬O­Ó16-bitªºµ{¦¡),¦ÓAndrew Schulman¤]¥Hcommand.com§âkrnl386.exeµ¹¸m´«±¼,¦Ó²£¥Í¤F¤@­Ó¦bv86 ¼Ò¦¡¤UªºDOS,¦¹ªk§Ú¦bWindows 98¤¤¤@¼Ë¥i¦æ,¦³½ìªº¬O¦pªG§A¦³°õ¦æWinICEªº¸Ü,§A±N·|±o¨ì¤@­Ó¨S¦³Windows¬É­±ªºDOS V86¾Þ§@Àô¹Ò¤U¤§WinICE,§A¥i¥H¦b¡¨C:\¡¨ªº±¡ªp¤U¥HCtrl+D¶i¤JWinICE,¦b¹Ï(¤G)<Step 1>§Ú¥HEXEHDR³o­Ó·L³nªº¤u¨ã³nÅé¨Ó¬d¬Ýkrnl386.exe,¦Ókrnl386.exe¦b°O¾ÐÅé·í¤¤ªº¼Ò²Õ¦WºÙ¬°Kernel,¦b¹Ï(¤G)<Step 2>¤¤§Ú¨q¥X¤Fkrnl386.exeªºÀÉÀY,¥HÃÒ©ú¥¦¬O­ÓNE®æ¦¡ªº¨Æ¹ê,³Ì«á¦b¹Ï(¤G)<Step 3>§Ú§âkrnl386.exe¤¤ªºEXITKERNEL¨ç¦¡µ¹³¡¥÷¤Ï²ÕĶ¥X¨Ó,«Ü©úÅ㪺krnl386.exe¬O­Ó¦bV86¼Ò¦¡¤Uªº16 bitµ{¦¡,·íµM,¦P¼hªº¥ç¥]¬A¤FKernel32.dll(¦bWindows System Programming SECRECTS<Matt PietrekµÛ>²Ä¤»³¹¹ïVWIN32.vxd ,Kernel32.dll,krnl386.exe¦³«D±`¤£¿ùªº»¡©ú),¦A¤W­±¤@¼h«K¬O§Ú­Ì¨Ï¥ÎªÌ¦bWindows 98¤¤©Ò¬Ý¨ìªºShell(¦bsystem.ini¤¤Shell = explorer.exe),³o³¡¥÷´£¨Ñ¤F§Ú­Ì¨C¤Ñ©Ò¬Ý¨ìªº¤u§@¦C,¶}©l¥\¯àªí¿ï³æ¡K.µ¥µ¥¤Íµ½ªº¤¶­±,·íµM,¦bAndrew Schulman®Ñ¤¤¤]¥HWinFile.exe§âExplorer.exe¨ú¥N±¼,´«¤F¤@­ÓShell«á,Windows 98(95)©Ò§e²{¥X¨Óªº¨Ï¥ÎªÌ¤¶­±«K¨S¦³­ì¥»ªºExplorer.exe³o¼Ëªº«K±¶,³s­ì¥»¦s¦b¤U¤èªº¤u§@¦C³£¤£¨£¤F,¦³¿³½ìªºÅªªÌ¤]¥i¥H¦Û¦æ§ó§ï,¦b³Ì¤W­±¤@¼h«K¬OWin 32À³¥Îµ{¦¡©Ò¦bªº³¡¥÷,¦b³o³¡¥÷ªºµ{¦¡©Ò­n°õ¦æªº³\¦h©I¥s³£·|³z¹L¤U­±¦U¼h¦¸ªº³q¤O¦X§@¤~¦³¥i¯à§¹¦¨,¤×¨ä¬O³Ì«áªº¨â¼h,§ó¬OWin32À³¥Îµ{¦¡°õ¦æ®É¤£¥i¯Ê¤Öªº

 

 

 


 

 


¹Ï(¤@)

 


¹Ï(¤G)

 


ùþDriver©Ò©I¥sªºVXD Service

    Windows 98¤¤¹ï®Ö¤ßªº¨t²Î©I¥s¬O¥Ñ20¸¹¤¤Â_¨Ó¹ê²{ªº¦p¤U¹Ï(¤T),¦b¹Ï(¤T)<Step 1>§Ú­Ì¥i¥H¬Ý¨ì

 

VMMCall _Allocate_Device_CB_Area, <<SIZE VwatchD_CB_STRUCT>, 0>

 

        ¦A¸g¹LDDK(Device Driver Kit)½sĶ«á,§Ú­Ì§â¸Ó¦æ¤Ï²Õͦ^¨Ó·|¬Ý¨ì¥H¤Uªº²Õ¦X»y¨¥µ{¦¡½X

 

6A 00          push        0

6A 04          push        4

CD 20          int         20h

A7 00 01 00     dd 000100A7

83 C4 08       add ESP,08

 

        «e¨â­ÓPushªº°Ê§@¬O¤À§O§â¨ç¦¡_Allocate_Device_CB_Area¤Þ¼Æ¥Ñ¥k¦Ó¥ª±À¤J°ïÅ|,±µ¤U¨Óªº20¸¹¤¤Â_«K¬O¦bWindows 98(95)¨t²Î¤¤¥Î¨Ó©I¥sVXD Service,¦Ó20¸¹¤¤Â_¤§«áªº000100A7 ,0001¬°´£¨Ñ¸ÓVXD ServiceªºDevice ID(¥i¥ÑDDKªºvmm.inc¸ÓÀɨú±oWindows¨t²Î©Ò´£¨Ñ¤§VXDªºDevice ID¸ê®Æ),00A7¥Nªí§Ú­Ì©Ò©I¥sªº¬°¸ÓVXDªºService Table¤¤²Ä´X¸¹ªºService(¥i¦b¦UincÀɤ¤§ä¨ì¬ÛÃö¸ê®Æ),¦p:¥ÑDevice ID 0001§Ú­Ì±oª¾¦¹ªA°È¥ÑVMM©Ò´£¨Ñ,¦]¦¹¦bVMM.inc¤¤§Ú­Ì§ä¨ìªº²Ä00A7­ÓService(¥Ñ0¶}©l)¬°_Allocate_Device_CB_Area,µ§ªÌ¦b¼g³o½g¤å³¹®É¤]»s§@¤F¤@­Ó¤u¨ã³nÅé,¥i¥HÀ°¤j®a¬Ý¬Ý©Ò¨Ï¥ÎªºVXD©I¥s¤F¨º¨ÇVXD Service,¨Ãªþ¤W­ì©l½X,³o°¦µ{¦¡§Ú§â³\¦hªºincÀɤ¤ªºDevice ID¤ÎService¦WºÙµ¥¸ê®Æ©ñ¦b¸Ì­±¤F,¤£¹L¦³¤@¤p³¡¥÷¨S¦³¥þ³¡¸m¤J,¦ý¥Ø«e¨Ó»¡¹ï¦U¦ìÀ³¸Ó¬Oº¡°÷¥Î¤F,¦pªGŪªÌ¦³¨ä¥¦»Ý­nªº¸Ü¥i¥H¦Û¦æ¥[¥HÂX¥R,¨ä¥¦¦³ÃöVXDªº¸ê®Æ¥i¦Û¦æ°Ñ¾\DDK©Î¼g§@VXDªº±M·~®ÑÄy,·íµM,¦pªG¤âÃ䦳Windows 95 System Programming Secrects³o¥»®ÑªºÅªªÌ,¤]¥i¥H½¾\¤@¤U¦b²Ä9³¹¤¤Matt Pietrek¹ïVXDªº¤¶²Ð

 

        ¹Ï(¤T)<Step 2>¬°§Ú¥HVTOOLD¬°¶}µo¤u¨ã,¨ä¤¤¥H¤U³o¦æµ{¦¡½X

return (IFSMgr_RegisterCFSD(Mount, IFSMGRVERSION, DeviceNames) != -1);

¸g¹L½sĶªº¤@­Ó¨Ò¤l,¦Ó¹Ï(¤T)<Step 3>¬°½sĶ«á©Ò²£¥Íªº¾÷±ñ½X»P¸g¹L¤Ï²ÕĶ«áªº²Õ¦X»y¨¥½X,¨ä¤¤§Ú­n´£¿ôªº¤@ÂI¬°³o¬O¸ÓVXD¥¼¸ü¤J°O¾ÐÅé«e©Ò¤Ï²ÕĶªºµ²ªG,¦b¹Ï(¤T)<Step 4> ¤¤§Ú­Ì«K¥i¥H¬Ý¨ì³o¬qCode¦b¸ü¤J°O¾ÐÅé«á,¬ÛÃö¸ê®Æªº­È«K³Q¸ü¤J¾¹µ¹¶ñ¤J¤F,¨ä¤¤

 

0028:C0148990    E8 C7 0A 00 00     call        C014945C

 

³o¦æ·|¥h©I¥s¹Ï(¤T)<Step 5>

 

0028:C014945C    CD 20           int         20h

0028:C014945E    62 80 40 00   DD 00408062

 

¦Ó¦b¬d¹LVMM.inc«á±oª¾Device ID=0040¬°IFSMgr,¦]¦¹§Ú­Ì¦A¥h¬dIFSMgr.inc

«K¥i¥H±oª¾Service½s¸¹¬°62ªº¨ç¦¡¦WºÙ¬°IFSMgr_RegisterCFSD,¦ÓService½s¸¹ªº³Ì°ª¦ì¤¸­Y³Q³]¬°1(¦p8062) ,«h¦¹VXD Service©I¥s·|³Q­×¸É¬°VxDJmpªº«ü¥O


¹Ï(¤T)

 


ùþVMM32.VXD?

 

    ¹Ï(¥|)<Step 1>¤¤,§Ú­Ì¥i¥H¬Ý¨ì¨ä¹êVMM32.VXD¬O¦h­ÓVXDªº¦XÅé,¥¦¤£¦ý¬O¤@­ÓDMPI Server,¤]´£¨Ñ¤F°O¾ÐÅéºÞ²z,±j¨î¦h¤uªº¯à¤O,Windows 98(95)¨t²Î¤¤«Ü­«­n¤]«Ü±`¨£ªºVMM³o­ÓVXD«K¬O¥Ñ¥¦©Ò´£¨Ñ

 

    ¥i¬OVMM32.vxd¨Ã¤£¬O¤@­Ó¼Ð·ÇªºVXD®æ¦¡,¥Ñ¹Ï(¥|) <Step 2>§Ú§âVMM32.VXD§ï¦W¬°VMM32.exe¦A³z¹LVisual C¤¤Dumpbin¤u¨ãµ{¦¡,¥H¦p¤Uªº«ü¥O°õ¦æ

C:\>dumpbin vmm32.exe

 

©Ò±o¨ìªº°T®§±oª¾¦b·L³nªº¤u¨ãÀË´ú¤§¤UVMM32.VXD³ºµM¬O­ÓDOS¤Uªºµ{¦¡,³o¼Ëªºµ²ªG­Ë¬O»P¥¦ªºÀɦW¦³ÂI¤£¤@­P,¤£¹LVMM32.VXD¬O¦bDOS¤U³Q±Ò°Ê¦Ó¶i¤J«OÅ@¼Ò¦¡¸ü¤JWindows¾ã­Ó¨t²Îªº,­Y¥HBorland Cªº©ÒªþªºTdumpµ{¦¡

 

c:\>tdump vmm32.exe

Turbo Dump  Version 5.0.16.4 Copyright (c) 1988, 1998 Borland International

                     Display of File VMM32.EXE

 

Old Executable Header

 

DOS File Size                                      E29B1h  (928177. )

Load Image Size                                     F800h  ( 63488. )

Relocation Table entry count                          0034h  (    52. )

Relocation Table address                              0040h  (    64. )

Size of header record      (in paragraphs)            0020h  (    32. )

Minimum Memory Requirement (in paragraphs)            1400h  (  5120. )

Maximum Memory Requirement (in paragraphs)            FFFFh  ( 65535. )

File load checksum                                    0000h  (     0. )

Overlay Number                                        0000h  (     0. )

 

Initial Stack Segment  (SS:SP)                    0F71:0400

Program Entry Point    (CS:IP)                    0000:1625

 

 

        ³£¥i¥HÃÒ©úVMM32.VXD¬ODOS°õ¦æÀɪºMZ®æ¦¡,¦Ó«DVXDªºLE®æ¦¡,­YŪªÌ­Ì¦³¿³½ì¤]¥i¥H§Q¥Î¥H«eDOS¤U¥Îªº¤Ï²Õͤu¨ã¨Ó¤Ï²ÕĶVMM32.VXD¬Û«H¤@©w·|¦³¤£¤Ö·N¥~ªºÅå³ß,¤£¹L¥Ø«eªºVMM32.VXD¦pªG¥ÎAndrew Schulman©Ò¼gªºw3mapµ{¦¡¨Ó´ú¸Õªº¸Ü,¨Ã¤£·|±o¨ìVMM32.VXD¤¤©ÒÄÀ¥Xªº¥¿½T¸ê®Æ,¦³Ãö³o³¡¥÷ªº°ÝÃD§Ú·|¦b¤å³¹ªºµ²§À³B§â§ÚÆ[¹î©Ò±o»P¦U¦ì°µ¤@­Ó»¡©ú,³Ì«á,¦bUnauthorized Windows 95 Developer¡¦s Resource Kit ³o¥»®Ñ¤¤¹ïVMM32.VXD¦³µÛ«D±`ºë±m¹ý©³ªº¤¶²Ð«Ü­È±o¹ïWindows 9X¨t²Î¦³¿³½ìªºÅªªÌ¤@±´¨s³º,¦bWindows 98¤¤VMM32.VXD¦h¥X¤F¤@­Ó¦W¬°NTKERNªºVXD,NTKERN¥]§t¦bVMM32.VXD¤¤,¦Ó¥¦¥¿¬OWindows 98¥i¥H¦P®É¤ä´©VXD¤ÎWDM¨âºØDriverªº­«­nÃöÁä

 

 

 

 


 


¹Ï(¥|)

 

 

    ¤§«e,§Ú´¿»¡¹LVMM32.VXD¥i¥H¥Ñ¹L¥hDOS¤Uªº¤Ï²Õͤu¨ã¨Ó³B²z,¥Ñ¹Ï(¤­) ¦U¦ì¥i¥H¬Ý¨ìVMM32.VXD¤¤³¡¥÷¤Ï²ÕĶªºµ²ªG,­º¥ý¹Ï(¤­)<Step 1>¬OVMM32.VXD¶i¤J«OÅ@¼Ò¦¡ªº¤@¤p¬qCode,·íµM,¦pªG¦bVMM32.VXD¤§«e¤w¦³¨ä¥¦µ{¦¡¥ý¤Á¤J«OÅ@¼Ò¦¡ªº¸Ü(¦p:EMM386.exe),«h·|¦³¤@¨Ç¨ó½Õªº¹Lµ{¨ÓÅýVMM32.VXD¥i¥H¶¶§Q¨ú±o«OÅ@¼Ò¦¡ªº±±¨îÅv,¦Ó¹Ï(¤­)<Step 2>«h¬OVMM32.VXD°h¥X«OÅ@¼Ò¦¡ªº¤@¬qCode,¹Ï(¤­)<Step 3>¬O¹ï¹Ï(¤­)<Step 2>³Ì«á¤@¦æLIDT«ü¥O©Ò·|¥Î¨ìªºIDTR ¼È¦s¾¹¦bMicrosoft's 80386/80486 Programming Guide¤¤©Ò´£¨ìªº»¡©ú,¦pªG¦U¦ì´¿¸g¼g¹L¤Á¤J«OÅ@¼Ò¦¡µ{¦¡ªº¸Ü,¬Û«H¹ï¹Ï(¤­)<Step 1>¤¤¤Á¤J«OÅ@¼Ò¦¡ªº°Ê§@¤@©w¤£·P¨ì­¯¥Í,¦pªGŪªÌ­Ì»Ý­n³o¤è­±¸ê®Æ¥i¸Ü,¤]¥i¥H¥hºô¸ô¤W(¹³¤@¨ÇBBS¯¸¤¤¦³Ãöµ{¦¡³]­pªOªººëµØ°Ï)§ä¨ì³\¦h¦³¥Îªº¸ê®Æ,µ§ªÌ·í¦~ªì¦¸±µÄ²¨ì«OÅ@¼Ò¦¡ªºµ{¦¡³]­p®É¤]¬O¦bºô¸ô¤W§ä¨ì³\¦h¤£¿ùªº¤å³¹,¦bŪ¤F³o¨Ç¸ê®Æ«á¦Û¤v¦A¿Ë¤â¥h¼g§@ÅçÃÒ,³z¹L³o¨Ç¹Lµ{¬Û«H¦U¦ì¤@©w¥i¥H¹ï«OÅ@¼Ò¦¡¦³ªì¨Bªº¤F¸Ñ,¦b¦¹§Ú´N¤£¦A¦h°µ»¡©ú¤F¡K^_^

 

 


¹Ï(¤­)

 


ùþWindows 98¤ä´©¨âºØ®æ¦¡ªºDriver

    ¦bWindows 98 DDK¤¤¦³¤£¤Ö¦³¥Îªº½d¨Ò ¥i¥H¨Ñ¤j®a°Ñ¦Ò,¦b¦¹§Ú±N°w¹ïWDM(Win32 Driver Model)ªº¨ç¦¡¬O¦p¦ó¦bWindows 98¤¤³Q¹ê²{¨Ó°µ­Ó»¡©ú,§Æ±æ¥i¥H¹ï¦U¦ì¦³©ÒÀ°§U,­º¥ý¥Ñ¹Ï(¤»)<Step 1>§Ú­Ì½sͤ@­ÓWDMªºDriver,¦Ó³o¥H¤U¤@¤p¬qµ{¦¡½X

ntStatus = IoCreateDevice(DriverObject,

                                                          sizeof(DEVICE_EXTENSION),

                                                          &deviceNameUnicodeString,

                                                          FILE_DEVICE_UNKNOWN,

                                                          0,

                                                          FALSE,

                                                          DeviceObject);

«h¬O§Ú­Ì©Ò­nÆ[¹îªº¹ï¶H,¦b¹Ï(¤»)<Step 2>¤¤,¬O§Ú§â³o¬qµ{¦¡½X¸g¹L½sĶ«á²£¥Íªº°õ¦æÀɤϲÕĶ«áªºµ²ªG

 

­º¥ý,¦bWindows 98¤¤WDMªºDriver¨Ã¤£¹³­ì¥»VXD©Ò¥ÎªºLEÀɮ׮榡,WDM¬°PEÀɮ׮榡,¦]¦¹§Ú­Ì¥i¥H³z¹L¤Ï²ÕĶPEÀɪº¤u¨ã³nÅé¨Ó§âWDM Driver¤Ï²Õͦ^¨Ó,±µµÛ§Ú­Ì¬Ý¨ì³o¦æ

 

FF1578020100     CALL    DWORD PTR [NTOSKRNL=>IoCreateDevice]

 

        ¦bPEÀɮ榡¤¤,§Ú­Ì¥i¥H¥ÑImport Table±oª¾³o­ÓPEÀɮצb°õ¦æ®É·|©I¥s¨º¨ÇÀɮשҴ£¨Ñªº¨ç¦¡(·íµM,¦bWin32ªºµ{¦¡¤¤,¦pªG³z¹LLoadLibrary..µ¥,°ÊºAªº¤è¦¡¨Ó¸ü¤Jªº¸Ü,¦bImport Table¤¤¨Ã¤£·|°O¿ý),§Ú­Ì¥i¥Hµo²{¦bWindows 98¤¤½s͹LªºWDM Driver¥¦¦bImport Table¤¤¬O§âIoCreateDevice³o¨ç¦¡°O¿ý¤F¥ÑNTOSKRNL.EXE¨Ó´£¨Ñ,¥i¬O¦bWindows 98¤¤¨Ã¨S¦³³o¼Ë¤@­Ó¹ê»ÚªºÀɮצs¦b,¦]¦¹,¦b¹Ï(¤C)<Step 1>§Ú­Ì¥i¥H¬Ý¨ì¦b§â³o­ÓDriver¸ü¤J¨ì°O¾ÐÅé«á,§Ú­Ìµo²{

        FF15380000FF  CALL [FF000038]    

 

¦ÓFF000038¬O¦bImport Table¤¤,¦Ó¸Ó³B«h°O¿ýIoCreateDevice¨ç¦¡¦b°O¾ÐÅ骺¦ì§},¥Ñ¹Ï(¤C)<Step 2>§Ú­Ì¥i¥H¬Ý¨ì

 

0028:FF000038       DC 98 29 C0

 

¦ÓC02998DC¥¿¬O¦bWindows 98¤¤IoCreateDevice¨ç¦¡©Ò¦bªº°O¾ÐÅé¦ì§},±µµÛ§Ú­Ì¦b(¤C)<Step 3>¬Ý¨ì³o­Ó¦ì§}ªº¤º®e,¦Ó³o­Ó°O¾ÐÅé¦ì§}¥¿¬O¦bNTKERN³o­ÓVXD©Ò¦bªº°O¾ÐÅé¦ì§}¤¤,¥Ñ¦¹,§Ú­Ì¤]¥i¥HÅçÃÒ¦bWindows 98¤¤NTKERN³o­ÓVXD¥i¥Î¨Ó´À¥NNTOSKRNL.EXE¦bWindows NT¤¤´£¨Ñ¹ïµ¥¨ç¦¡ªº¯à¤O,¥H¹F¨ì¨â­ÓOS¥i¥H¦@¥Î¦P¤@ºØ®æ¦¡Driverªº¥Øªº,¥Ñ1997¦~11¤ë Microsoft System Journalªº¤@½g¤å³¹¡§Surveying the New Win32 Driver Model for Windows 98 and Windows NT 5.0¡¨¤¤©Ò´£¨ìªº¡¨Unfortunately,drivers for standard Windows-based devices must fit into an older architecture that¡¦s incompatible with this new kernel-mode support. ¡K¡K¡K.¡¨,¥Ñ¦¹§Ú­Ì¥i¥H±oª¾¦bWindows 98¤¤¹ï©ó¼Ð·ÇªºÅX°Ê¸Ë¸m(¦pÁä½L,ºÏºÐ¾÷¡Kµ¥ªºÅX°Êµ{¦¡),±NµLªk³z¹L·s¬[ºcªºDriver¨Ó¥R¥÷¹ê²{,¦Ó»Ý³z¹L¥H©¹VXD©Òª½±µ¨Ï¥ÎªºVXD Service

 

        ¦¹¥~,¦b¹Ï(¤K)<Step 1>§Ú­Ì¥H³o¤@¤p¬qµ{¦¡½X¬°¨Ò¤l

 

pPHist->timeStamp = KeQueryPerformanceCounter(NULL);

 

¦b¹Ï(¤K)<Step 2>§Ú­Ì¬Ý¨ì½sĶ«áªºµ²ªG,¨ä¤¤KeQueryPerformanceCounter¥ÑImport Table¤¤¥i¥H¬d±o¬O¥ÑHAL.DLL(HAL.DLL¬°NT©Ò¾Ö¦³ªºÀÉ®×)©Ò´£¨Ñªº¨ç¦¡,¦ý¦b¹Ï(¤K)<Step 3>¥i¥H¬Ý¨ì³o¬qµ{¦¡½X³Q¸m¤J°O¾ÐÅé«áªºµ²ªG,¦P¼Ëªº¦b¹Ï(¤K)<Step 4>¥i¥H±oª¾KeQueryPerformanceCounter¦bWindows 98¤¤©Ò¹ïÀ³ªº³B²z¨ç¦¡°O¾ÐÅé¦ì§},¹Ï(¤K)<Step 5>