82 lines
2.2 KiB
NASM
82 lines
2.2 KiB
NASM
|
;***************************************************************************
|
||
|
;* KRNLPEEK.ASM
|
||
|
;*
|
||
|
;* Assembly code used to peer into the heart of KERNEL and return
|
||
|
;* information in global variables.
|
||
|
;*
|
||
|
;***************************************************************************
|
||
|
|
||
|
INCLUDE TOOLPRIV.INC ;Include the TOOLHELP values
|
||
|
PMODE32 = 0 ;This should work either way
|
||
|
PMODE = 0
|
||
|
INCLUDE WINKERN.INC
|
||
|
INCLUDE WINDOWS.INC
|
||
|
|
||
|
;** Functions
|
||
|
externFP GlobalMasterHandle
|
||
|
externFP GlobalLock
|
||
|
externFP GetVersion
|
||
|
externFP GetProcAddress
|
||
|
externFP GetModuleHandle
|
||
|
externNP HelperHandleToSel
|
||
|
|
||
|
sBegin DATA
|
||
|
externB _szKernel
|
||
|
sEnd DATA
|
||
|
;** Functions
|
||
|
|
||
|
sBegin CODE
|
||
|
assumes CS,CODE
|
||
|
|
||
|
; void KernelType(void)
|
||
|
;
|
||
|
; Returns information from KERNEL in global variables
|
||
|
|
||
|
cProc KernelType, <PUBLIC>, <si,di>
|
||
|
cBegin
|
||
|
mov wTHFlags,0 ;Zero flags indicates error
|
||
|
|
||
|
.286
|
||
|
;** Call the undocumented function GlobalMasterHandle to get
|
||
|
;* a pointer to the global HeapInfo structure.
|
||
|
;** This is the means we can use to detect the kernel types.
|
||
|
|
||
|
cCall GlobalMasterHandle
|
||
|
cCall HelperHandleToSel, <dx> ;Convert it to a selector
|
||
|
mov hMaster,ax ;Save the handle
|
||
|
mov wTHFlags,TH_KERNEL_386
|
||
|
|
||
|
KT_BothPModes:
|
||
|
|
||
|
;** Now get pmode KERNEL information
|
||
|
; cCall GetVersion ;Which Windows version are we on
|
||
|
mov bx,SEG GlobalLock ;KERNEL code segment selector
|
||
|
; cmp ax,0004h ;Win 4.0?
|
||
|
; je KT_Win31
|
||
|
; mov wTHFlags,0 ;Zero wTHFlags indicates error
|
||
|
; jmp SHORT KT_End ;Unknown Windows version
|
||
|
KT_Win31:
|
||
|
mov ax,seg _DATA
|
||
|
mov dx,offset _DATA:_szKernel
|
||
|
cCall GetModuleHandle,<ax,dx>
|
||
|
cCall GetProcAddress,<ax,0,332> ; DX:AX -> hGlobalHeap
|
||
|
mov segKernel,dx ;Save for later
|
||
|
mov es,dx ;Point with ES
|
||
|
add ax,4
|
||
|
mov npwExeHead,ax
|
||
|
add ax,10
|
||
|
mov npwTDBHead,ax
|
||
|
add ax,2
|
||
|
mov npwTDBCur,ax
|
||
|
add ax,6
|
||
|
mov npwSelTableLen,ax
|
||
|
add ax,2
|
||
|
mov npdwSelTableStart,ax
|
||
|
.8086
|
||
|
KT_End:
|
||
|
|
||
|
cEnd
|
||
|
|
||
|
sEnd
|
||
|
END
|