2012年7月5日星期四

EnumServicesStatus.asm


.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
includelib user32.lib
includelib kernel32.lib
include comctl32.inc
includelib comctl32.lib
include advapi32.inc
includelib advapi32.lib
.data
szClassName db "correy",0
szCaptionMain db "made by correy",0
ListViewClass db 'SysListView32',0;ListBox
szstatic db "Static",0
szDisplayName db '显示的名字',0
szServiceName db "服务的名字",0
szServiceType db "服务的类型",0
szcurrentstate db "当前的状态",0
szSERVICE_WIN32_OWN_PROCESS db "WIN32_OWN_PROCESS",0
szSERVICE_WIN32_SHARE_PROCESS db "WIN32_SHARE_PROCESS",0
szSERVICE_KERNEL_DRIVER db "KERNEL_DRIVER",0
szSERVICE_FILE_SYSTEM_DRIVER db "FILE_SYSTEM_DRIVER",0
szSERVICE_INTERACTIVE_PROCESS db "INTERACTIVE_PROCESS",0
szunkown db "未知",0
szSERVICE_STOPPED db "已经停止",0
szSERVICE_START_PENDING db "SERVICE_START_PENDING ",0
szSERVICE_STOP_PENDING db "SERVICE_STOP_PENDING ",0
szSERVICE_RUNNING db "正在运行中",0
szSERVICE_CONTINUE_PENDING db "SERVICE_CONTINUE_PENDING",0
szSERVICE_PAUSE_PENDING db "SERVICE_PAUSE_PENDING",0
szSERVICE_PAUSED db "SERVICE_PAUSED",0
notice db "不足之处,敬请指导,还有更多功能没有完善。",0ah,0dh,\
          "QQ:112426112",0ah,0dh,\
          "Email:leguanyuan@126.com",0ah,0dh,\
          "homepage:http://correy.webs.com",0ah,0dh,0

.data?
hInstance dd ?
hWinMain dd ?
hlist dd ?
stWndClass WNDCLASSEX <>
stMsg MSG <>
lvc LV_COLUMN <>
lvi LV_ITEM <>
x dd ?
y dd ?
z dd ?
buffer db 36*512 dup (?)
.code
liuchunli proc uses ebx edi esi,hWnd,uMsg,wParam,lParam
local p:POINT
.if uMsg == WM_CLOSE
invoke DestroyWindow,hWinMain
invoke PostQuitMessage,NULL

.elseif uMsg == WM_CREATE
INVOKE CreateWindowEx,WS_EX_CLIENTEDGE,addr ListViewClass,0,WS_CHILD or WS_VISIBLE or LVS_REPORT or LVS_SHAREIMAGELISTS,0,0,700,400,hWnd,0,hInstance,0
mov hlist,eax

mov lvc.imask,LVCF_TEXT+LVCF_WIDTH
mov lvc.pszText,offset szDisplayName
mov lvc.lx,100
invoke SendMessage,hlist, LVM_INSERTCOLUMN, 0, addr lvc

mov lvc.pszText,offset szServiceName
mov lvc.lx,200
invoke SendMessage,hlist, LVM_INSERTCOLUMN, 1 ,addr lvc

mov lvc.pszText,offset szServiceType
mov lvc.lx,200
invoke SendMessage,hlist,LVM_INSERTCOLUMN,2,addr lvc

mov lvc.pszText,offset szcurrentstate
mov lvc.lx,200
invoke SendMessage,hlist,LVM_INSERTCOLUMN,3,addr lvc

mov lvi.iItem,0

invoke OpenSCManager,0,0,SC_MANAGER_ENUMERATE_SERVICE or GENERIC_READ
invoke EnumServicesStatus,eax,SERVICE_WIN32 or SERVICE_DRIVER,SERVICE_ACTIVE or SERVICE_INACTIVE,addr buffer,36*512,addr x,addr y,addr z
lea esi,buffer
show:
mov lvi.imask,LVIF_TEXT
mov eax,[esi]
mov lvi.pszText,eax
mov lvi.iSubItem,0
invoke SendMessage,hlist,LVM_INSERTITEM,0,addr lvi

mov lvi.imask,LVIF_TEXT
mov eax,[esi+4]
mov lvi.pszText,eax
mov lvi.iSubItem,1
invoke SendMessage,hlist,LVM_SETITEM,0,addr lvi

mov edx,[esi+8]
.if edx == 10h
    lea eax,szSERVICE_WIN32_OWN_PROCESS
    mov lvi.pszText,eax
    mov lvi.iSubItem,2
    invoke SendMessage,hlist,LVM_SETITEM,0,addr lvi
.elseif edx==SERVICE_WIN32_SHARE_PROCESS
    lea eax,szSERVICE_WIN32_SHARE_PROCESS
    mov lvi.pszText,eax
    mov lvi.iSubItem,2
    invoke SendMessage,hlist,LVM_SETITEM,0,addr lvi
.elseif edx==SERVICE_KERNEL_DRIVER
    lea eax,szSERVICE_KERNEL_DRIVER
    mov lvi.pszText,eax
    mov lvi.iSubItem,2
    invoke SendMessage,hlist,LVM_SETITEM,0,addr lvi
.elseif edx==SERVICE_FILE_SYSTEM_DRIVER
    lea eax,szSERVICE_FILE_SYSTEM_DRIVER
    mov lvi.pszText,eax
    mov lvi.iSubItem,2
    invoke SendMessage,hlist,LVM_SETITEM,0,addr lvi
.elseif edx==SERVICE_INTERACTIVE_PROCESS
    lea eax,szSERVICE_INTERACTIVE_PROCESS
    mov lvi.pszText,eax
    mov lvi.iSubItem,2
    invoke SendMessage,hlist,LVM_SETITEM,0,addr lvi
.else
    lea eax,szunkown
    mov lvi.pszText,eax
    mov lvi.iSubItem,2
    invoke SendMessage,hlist,LVM_SETITEM,0,addr lvi
.endif

    mov edx,[esi+12]
.if edx == SERVICE_STOPPED
    lea eax,szSERVICE_STOPPED
    mov lvi.pszText,eax
    mov lvi.iSubItem,3
    invoke SendMessage,hlist,LVM_SETITEM,0,addr lvi
.elseif edx==SERVICE_START_PENDING
    lea eax,szSERVICE_START_PENDING
    mov lvi.pszText,eax
    mov lvi.iSubItem,3
    invoke SendMessage,hlist,LVM_SETITEM,0,addr lvi
.elseif edx==SERVICE_STOP_PENDING
    lea eax,szSERVICE_STOP_PENDING
    mov lvi.pszText,eax
    mov lvi.iSubItem,3
    invoke SendMessage,hlist,LVM_SETITEM,0,addr lvi
.elseif edx==SERVICE_RUNNING
    lea eax,szSERVICE_RUNNING
    mov lvi.pszText,eax
    mov lvi.iSubItem,3
    invoke SendMessage,hlist,LVM_SETITEM,0,addr lvi
.elseif edx==SERVICE_CONTINUE_PENDING
    lea eax,szSERVICE_CONTINUE_PENDING
    mov lvi.pszText,eax
    mov lvi.iSubItem,3
    invoke SendMessage,hlist,LVM_SETITEM,0,addr lvi
.elseif edx==SERVICE_PAUSE_PENDING
    lea eax,szSERVICE_PAUSE_PENDING
    mov lvi.pszText,eax
    mov lvi.iSubItem,3
    invoke SendMessage,hlist,LVM_SETITEM,0,addr lvi
.elseif edx==SERVICE_PAUSED
    lea eax,szSERVICE_PAUSED
    mov lvi.pszText,eax
    mov lvi.iSubItem,3
    invoke SendMessage,hlist,LVM_SETITEM,0,addr lvi
.endif

add esi,36
dec y
cmp y,0
jne show

INVOKE CreateWindowEx,WS_EX_CLIENTEDGE,addr szstatic,0,WS_CHILD or WS_VISIBLE or SS_LEFT or WS_GROUP,0,400,700,100,hWnd,0,hInstance,0
invoke SendMessage,eax,WM_SETTEXT,0,addr notice

.else
invoke DefWindowProc,hWnd,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
liuchunli endp
start:
invoke InitCommonControls
invoke GetModuleHandle,NULL
mov hInstance,eax
mov stWndClass.hInstance,eax
invoke LoadIcon,hInstance,1
mov stWndClass.hIcon,eax
invoke LoadCursor,0,32512
mov dword ptr stWndClass+28,eax
mov stWndClass.cbSize,48
mov stWndClass.style,3
mov stWndClass.lpfnWndProc,offset liuchunli
mov stWndClass.hbrBackground,6
mov stWndClass.lpszClassName,offset szClassName
invoke RegisterClassEx,addr stWndClass
invoke CreateWindowEx,200h,offset szClassName,offset szCaptionMain,0Ca0000h,80000000h,80000000h,710,530,0,0,hInstance,0
mov hWinMain,eax
invoke ShowWindow,hWinMain,1
invoke UpdateWindow,hWinMain
.while TRUE
invoke GetMessage,addr stMsg,0,0,0
.break .if eax == 0
invoke TranslateMessage,addr stMsg
invoke DispatchMessage,addr stMsg
.endw
invoke ExitProcess,0
end start
;made at 2010.10.30
;此文献给我的老婆杜岷娟。

没有评论:

发表评论