iczelion tut14[2]

[入库:2005年8月19日] [更新:2007年3月24日]

本文简介:选择自 jimgreen 的 blog

process_information ends

进程句柄和进程id是两个不同的概念。进程id好似一个唯一值,而进程句柄是调用相关的windows api 后得到的一个返回值。不能用进程句柄来标识一个进程的唯一性,因为这个值并不唯一。在调用createprocess产生新进程后,该进程就被创建,而且cerateprocess函数立即返回。您可以调用函数getexitcodeprocess来检验进程是否结束。该函数的原型如下:

getexitcodeprocess proto hprocess:dword, lpexitcode:dword

如果调用成功,lpexitcode中包含了所查询进程的状态码。如果等于still_active就表明该进程依旧存在。 您可以调用函数terminateprocess来强制终止一个进程。该函数的原型如下:

terminateprocess proto hprocess:dword, uexitcode:dword

您可以指定任意一个退出值。用该函数结束一个进程并不好,因为该进程加载的动态连接库并不会得到进程正退出的消息。
 

例子:

在下面的例子中,当用户选择菜单项“crate process”时我们创建一个新进程。它会去执行“"msgbox.exe”。如果用户想要终止新进程,可以选择菜单项“terminate process”。这时,应用程序检查欲终止的进程是否仍存在,若存在则调用terminateprocess函数来终止它。

.386
.model flat,stdcall
option casemap:none
winmain proto :dword,:dword,:dword,:dword
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.const
idm_create_process equ 1
idm_terminate equ 2
idm_exit equ 3

.data
classname db "win32asmprocessclass",0
appname  db "win32 asm process example",0
menuname db "firstmenu",0
processinfo process_information <>
programname db "msgbox.exe",0

.data?
hinstance hinstance ?
commandline lpstr ?
hmenu handle ?
exitcode dword ?                    ; contains the process exitcode status from getexitcodeprocess call.

.code
start:
        invoke getmodulehandle, null
        mov    hinstance,eax
        invoke getcommandline
        mov commandline,eax
        invoke winmain, hinstance,null,commandline, sw_showdefault
        invoke exitprocess,eax

winmain proc hinst:hinstance,hprevinst:hinstance,cmdline:lpstr,cmdshow:dword
    local wc:wndclassex
    local msg:msg
    local hwnd:hwnd
    mov   wc.cbsize,sizeof wndclassex
    mov   wc.style, cs_hredraw or cs_vredraw
    mov   wc.lpfnwndproc, offset wndproc
    mov   wc.cbclsextra,null
    mov   wc.cbwndextra,null
    push  hinst
    pop   wc.hinstance
    mov   wc.hbrbackground,color_window+1
    mov   wc.lpszmenuname,offset menuname
    mov   wc.lpszclassname,offset classname
    invoke loadicon,null,idi_application
    mov   wc.hicon,eax
    mov   wc.hiconsm,eax
    invoke loadcursor,null,idc_arrow
    mov   wc.hcursor,eax
    invoke registerclassex, addr wc
    invoke createwindowex,ws_ex_clientedge,addr classname,addr appname,\
           ws_overlappedwindow,cw_usedefault,\
           cw_usedefault,300,200,null,null,\
           hinst,null
    mov   hwnd,eax
    invoke showwindow, hwnd,sw_shownormal
    invoke updatewindow, hwnd
    invoke getmenu,hwnd
    mov  hmenu,eax
    .while true
                invoke getmessage, addr msg,null,0,0
                .break .if (!eax)
                invoke translatemessage, addr msg
                invoke dispatchmessage, addr msg
    .endw

本文关键:iczelion asm
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top