发新话题
打印

[原创]系统服务管理器 Win32汇编版

[原创]系统服务管理器 Win32汇编版

信息来源:邪恶八进制信息安全团队(www.eviloctal.com
软件作者:zshoucheng


想看自己电脑系统服务情况时,无奈系统自带的 MMC 太慢

看到有人发了,所以自己也就写了个


采用 Win32 汇编实现,运行速度和体积(< 10 KB)都没话说,且看查看服务一目了然

PS:其实Masm写GUI程序也蛮不错的,此程序能自动应用系统主题样式。。。

想看源码往 OD 里一扔就什么都知道了

附件

ServiceManager.rar (5 KB)

2007-11-3 00:07, 下载次数: 111

--->  伱 能 領 導 潮 流.  我 可 領 導 全 賕!  <---

TOP

不错!速度的确快!服!
  但是功能就能发现...根本排不了顺序!


导入后会发现我的电脑右键就有服务选项.....


Windows Registry Editor Version 5.00


[-HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\find]

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\services]
@="服务设置"
"SuppressionPolicy"=dword:4000003c

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\services\command]
@=hex(2):25,00,77,00,69,00,6e,00,64,00,69,00,72,00,25,00,5c,00,73,00,79,00,73,\
00,74,00,65,00,6d,00,33,00,32,00,5c,00,6d,00,6d,00,63,00,2e,00,65,00,78,00,\
65,00,20,00,2f,00,73,00,20,00,25,00,77,00,69,00,6e,00,64,00,69,00,72,00,25,\
00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,00,65,00,\
72,00,76,00,69,00,63,00,65,00,73,00,2e,00,6d,00,73,00,63,00,00,00

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\zdevmgmt]
@="设备管理器"
"SuppressionPolicy"=dword:4000003c

[HKEY_CLASSES_ROOT\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\zdevmgmt\command]
@=hex(2):25,00,77,00,69,00,6e,00,64,00,69,00,72,00,25,00,5c,00,73,00,79,00,73,\
00,74,00,65,00,6d,00,33,00,32,00,5c,00,6d,00,6d,00,63,00,2e,00,65,00,78,00,\
65,00,20,00,2f,00,73,00,20,00,25,00,77,00,69,00,6e,00,64,00,69,00,72,00,25,\
00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,64,00,65,00,\
76,00,6d,00,67,00,6d,00,74,00,2e,00,6d,00,73,00,63,00,00,00

TOP

默认就是按服务名称排序的,找服务一般就按服务名称的

对其他列进行排序没多大意义。。。
--->  伱 能 領 導 潮 流.  我 可 領 導 全 賕!  <---

TOP

想问一下,哪些服务能够真正的删除,好象不难删除一些服务?/

TOP

提个小小建议,如果点击“状态”能按照状态排序就更方便了。:)
曾几何时,有人对我说:装B遭雷劈。我说:去你妈的。于是,这个人又对我说:如果再说脏话,上帝会惩罚你的。我说:我操上帝。结论:彪悍的人生不需要上帝。

TOP

提个小小建议,如果加入右键菜单,实现添加服务,删除服务,启动服务等功能,那就完美鸟

PS:上述功能非常之简单 
游戏吧  http://www.game8.cc/MyBlog    http://www.asm32.cn

TOP

引用:
引用第5楼asm于2007-11-06 16:54发表的 :
提个小小建议,如果加入右键菜单,实现添加服务,删除服务,启动服务等功能,那就完美鸟

PS:上述功能非常之简单 


PS: 本来就有。。asm你丫的先用下再说

感觉 增加服务 用不到。。。
--->  伱 能 領 導 潮 流.  我 可 領 導 全 賕!  <---

TOP

原来有了.........
游戏吧  http://www.game8.cc/MyBlog    http://www.asm32.cn

TOP

淘到一个代码,share一下:


.386
.model flat, stdcall
option casemap:none
include windows.inc

include user32.inc
includelib user32.lib

include kernel32.inc
includelib kernel32.lib

include advapi32.inc
includelib advapi32.lib


WinMain PROTO :DWORD, :DWORD, :DWORD, :DWORD
ResizeConctrol PROTO
ShowServiceInfo PROTO :dword, :dword, :dword
ShowSvcStatusInfo PROTO :dword
ShowSvcData PROTO :dword, :dword, :dword

;.const
IDC_BtnEnum   equ 103
IDC_EdtFileSpec equ 105
IDC_EdtVerInfo equ 107

c_GrpSvcTypeTop   equ 5
c_GrpSvcTypeLeft  equ 2

c_ChkBtnSvcWin32Top   equ c_GrpSvcTypeTop+15
c_ChkBtnSvcWin32Left  equ c_GrpSvcTypeLeft+5
c_ChkBtnSvcWin32Width  equ 150
c_ChkBtnSvcWin32Height equ 15

c_ChkBtnSvcDrvTop   equ c_ChkBtnSvcWin32Top+c_ChkBtnSvcWin32Height+5
c_ChkBtnSvcDrvLeft  equ c_ChkBtnSvcWin32Left
c_ChkBtnSvcDrvWidth  equ c_ChkBtnSvcWin32Width
c_ChkBtnSvcDrvHeight equ c_ChkBtnSvcWin32Height

c_GrpSvcTypeWidth  equ c_ChkBtnSvcWin32Width+10
c_GrpSvcTypeHeight equ c_ChkBtnSvcDrvTop+c_ChkBtnSvcDrvHeight+5


c_GrpSvcStateTop   equ c_GrpSvcTypeTop
c_GrpSvcStateLeft  equ c_GrpSvcTypeLeft+c_GrpSvcTypeWidth+10

c_ChkBtnSvcActTop   equ c_GrpSvcStateTop+15
c_ChkBtnSvcActLeft  equ c_GrpSvcStateLeft+5
c_ChkBtnSvcActWidth  equ 150
c_ChkBtnSvcActHeight equ 15

c_ChkBtnSvcInActTop   equ c_ChkBtnSvcActTop+c_ChkBtnSvcActHeight+5
c_ChkBtnSvcInActLeft  equ c_ChkBtnSvcActLeft
c_ChkBtnSvcInActWidth  equ c_ChkBtnSvcActWidth
c_ChkBtnSvcInActHeight equ c_ChkBtnSvcActHeight

c_GrpSvcStateWidth  equ c_ChkBtnSvcActWidth+10
c_GrpSvcStateHeight equ c_ChkBtnSvcInActTop+c_ChkBtnSvcInActHeight+5

c_BtnShowTop  equ c_GrpSvcTypeTop
c_BtnShowLeft  equ (c_GrpSvcStateLeft+c_GrpSvcStateWidth+10)
c_BtnShowWidth equ 70
c_BtnShowHeight equ 25

c_EdtSvrInfoLeft  equ 2
c_EdtSvrInfoTop   equ c_GrpSvcTypeTop+c_GrpSvcTypeHeight+5
c_EdtSvrInfoHeight equ 165

c_WinWidth   equ c_BtnShowLeft+c_BtnShowWidth + 10  ;c_EdtSvrInfoLeft + c_EdtSvrInfoWidth + 2
c_WinHeight   equ c_EdtSvrInfoTop + c_EdtSvrInfoHeight + 45

c_EdtSvrInfoWidth  equ c_WinWidth-8-c_EdtSvrInfoLeft

m_CatStr MACRO szStr: REQ
  invoke SendMessage, g_hEditSvrInfo, EM_REPLACESEL, FALSE, szStr
ENDM

m_GoNextLine MACRO
  invoke SendMessage, g_hEditSvrInfo, EM_REPLACESEL, FALSE, ADDR g_szCR
ENDM

m_MsgBox MACRO lpszMsg: REQ, dwIcon: REQ
  invoke MessageBox, g_hWndMain, lpszMsg, OFFSET g_szAppName_cn, dwIcon
ENDM


.data
g_szClsName db "ListSvrCls", 0
g_szAppName_cn db "系统服务列表", 0
g_szEditCls db "EDIT", 0
g_szBtnCls db "button", 0
g_szBtnEnumSvc_cn db "&E 枚举", 0
g_szSERVICE_WIN32  db "SERVICE_WIN32", 0
g_szSERVICE_DRIVER db "SERVICE_DRIVER", 0
g_szSERVICE_ACTIVE db "SERVICE_ACTIVE", 0
g_szSERVICE_INACTIVE db "SERVICE_INACTIVE", 0
g_szChkSvrTypeFirst_cn db "请先选择要枚举的"
g_szServiceType_cn db "服务类型:", 0
g_szChkSvrStateFirst_cn db "请先选择要枚举的"
g_szServiceState_cn db "服务状态:", 0


.data?
g_hInstance  HINSTANCE ?
g_hWndMain  HANDLE ?
g_hEditFileSpec  HANDLE ?
g_hBtnShow  HANDLE ?
g_hEditSvrInfo  HANDLE ?
g_szFileSpec  db 256 dup (?)
g_hGrpServiceType HANDLE ?
g_hChkBtnSvcWin32 HANDLE ?
g_hChkBtnSvcDrv HANDLE ?
g_hGrpServiceState HANDLE ?
g_hChkBtnSvcAct HANDLE ?
g_hChkBtnSvcInAct HANDLE ?
g_dwServiceType dword ?
g_dwServiceState dword ?


.code
start:
  invoke GetModuleHandle, NULL
  mov  g_hInstance, eax
  invoke WinMain, g_hInstance, NULL, NULL, SW_SHOWDEFAULT
  invoke ExitProcess, eax


WinMain proc hInst: DWORD, hPrevInst: DWORD, CmdLine: DWORD, 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
  mov eax, g_hInstance
  mov wc.hInstance, eax
  mov wc.hbrBackground, COLOR_APPWORKSPACE
  mov wc.lpszMenuName, NULL
  mov wc.lpszClassName, OFFSET g_szClsName
  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_TOPMOST, ADDR g_szClsName,\
      ADDR g_szAppName_cn, WS_OVERLAPPEDWINDOW+WS_VISIBLE,\
      CW_USEDEFAULT, CW_USEDEFAULT, c_WinWidth, c_WinHeight,\
      NULL, NULL, hInst, NULL
  mov hwnd, eax
  .while TRUE
    invoke GetMessage, ADDR msg, NULL, 0, 0
    .BREAK .IF (!eax)

    ;--- process keystrokes directly in the message loop
    .if msg.message == WM_SYSKEYUP
      .if msg.wParam == VK_E     ; Alt + E
        invoke PostMessage, hwnd, WM_COMMAND, IDC_BtnEnum, BM_CLICK
      .endif
    .endif
    ; ------------------------------------------------
    invoke TranslateMessage, ADDR msg
    invoke DispatchMessage, ADDR msg
  .endw
  mov eax, msg.wParam
  ret
WinMain endp


WndProc proc hWnd: HWND, uMsg: UINT, wParam: WPARAM, lParam: LPARAM
  LOCAL rect: RECT
  LOCAL hdc: DWORD

  .if uMsg==WM_CREATE
    mov eax, hWnd
    mov g_hWndMain, eax

    ;--- Create enum button
    invoke CreateWindowEx, NULL, addr g_szBtnCls, addr g_szBtnEnumSvc_cn,\
      WS_CHILD+WS_VISIBLE, c_BtnShowLeft, c_BtnShowTop, c_BtnShowWidth, c_BtnShowHeight,\
      hWnd, IDC_BtnEnum, g_hInstance, NULL
    mov g_hBtnShow, eax

    ;--- Create group
    invoke CreateWindowEx, NULL, addr g_szBtnCls, offset g_szServiceType_cn,\
      WS_CHILD+WS_VISIBLE+BS_GROUPBOX, c_GrpSvcTypeLeft, c_GrpSvcTypeTop, \
      c_GrpSvcTypeWidth, c_GrpSvcTypeHeight,\
      hWnd, NULL, g_hInstance, NULL
    mov g_hGrpServiceType, eax

    ;--- Create autocheck button
    invoke CreateWindowEx, NULL, addr g_szBtnCls, offset g_szSERVICE_WIN32,\
      WS_CHILD+WS_VISIBLE+BS_AUTOCHECKBOX, c_ChkBtnSvcWin32Left, c_ChkBtnSvcWin32Top,\
      c_ChkBtnSvcWin32Width, c_ChkBtnSvcWin32Height,\
      hWnd, NULL, g_hInstance, NULL
    mov g_hChkBtnSvcWin32, eax

    ;--- Create autocheck button
    invoke CreateWindowEx, NULL, addr g_szBtnCls, offset g_szSERVICE_DRIVER,\
      WS_CHILD+WS_VISIBLE+BS_AUTOCHECKBOX, c_ChkBtnSvcDrvLeft, c_ChkBtnSvcDrvTop,\
      c_ChkBtnSvcDrvWidth, c_ChkBtnSvcDrvHeight,\
      hWnd, NULL, g_hInstance, NULL
    mov g_hChkBtnSvcDrv, eax

    ;--- Create group
    invoke CreateWindowEx, NULL, addr g_szBtnCls, offset g_szServiceState_cn,\
      WS_CHILD+WS_VISIBLE+BS_GROUPBOX, c_GrpSvcStateLeft, c_GrpSvcStateTop,\
      c_GrpSvcStateWidth, c_GrpSvcStateHeight,\
      hWnd, NULL, g_hInstance, NULL
    mov g_hGrpServiceState, eax

    ;--- Create autocheck button
    invoke CreateWindowEx, NULL, addr g_szBtnCls, offset g_szSERVICE_ACTIVE,\
      WS_CHILD+WS_VISIBLE+BS_AUTOCHECKBOX, c_ChkBtnSvcActLeft, c_ChkBtnSvcActTop,\
      c_ChkBtnSvcActWidth, c_ChkBtnSvcActHeight,\
      hWnd, NULL, g_hInstance, NULL
    mov g_hChkBtnSvcAct, eax

    ;--- Create autocheck button
    invoke CreateWindowEx, NULL, addr g_szBtnCls, offset g_szSERVICE_INACTIVE,\
      WS_CHILD+WS_VISIBLE+BS_AUTOCHECKBOX, c_ChkBtnSvcInActLeft, c_ChkBtnSvcInActTop,\
      c_ChkBtnSvcInActWidth, c_ChkBtnSvcInActHeight,\
      hWnd, NULL, g_hInstance, NULL
    mov g_hChkBtnSvcInAct, eax

    ;--- Create services info editbox
    invoke CreateWindowEx, NULL, addr g_szEditCls, NULL,\
      WS_CHILD+WS_VISIBLE+ES_MULTILINE+WS_HSCROLL+WS_VSCROLL,\
      c_EdtSvrInfoLeft, c_EdtSvrInfoTop, c_EdtSvrInfoWidth, c_EdtSvrInfoHeight,\
      hWnd, IDC_EdtVerInfo, g_hInstance, NULL
    mov g_hEditSvrInfo, eax

  .elseif uMsg==WM_COMMAND
    .if lParam!=0
      mov eax, wParam
      .IF ax==IDC_BtnEnum
        shr eax, 16
        .if ax==BN_CLICKED
          xor eax, eax
          mov g_dwServiceType, eax
          invoke SendMessage, g_hChkBtnSvcWin32, BM_GETCHECK, eax, eax
          .if eax==BST_CHECKED
            or g_dwServiceType, SERVICE_WIN32
          .endif
          xor eax, eax
          invoke SendMessage, g_hChkBtnSvcDrv, BM_GETCHECK, eax, eax
          .if eax==BST_CHECKED
            or g_dwServiceType, SERVICE_DRIVER
          .endif
          cmp g_dwServiceType, 0
          jne @F
          m_MsgBox OFFSET g_szChkSvrTypeFirst_cn, NULL
          xor eax, eax
          jz @BtnClkEnd
      @@:
          xor eax, eax
          mov g_dwServiceState, eax
          invoke SendMessage, g_hChkBtnSvcAct, BM_GETCHECK, eax, eax
          .if eax==BST_CHECKED
            or g_dwServiceState, SERVICE_ACTIVE
          .endif
          xor eax, eax
          invoke SendMessage, g_hChkBtnSvcInAct, BM_GETCHECK, eax, eax
          .if eax==BST_CHECKED
            or g_dwServiceState, SERVICE_INACTIVE
          .endif
          cmp g_dwServiceState, 0
          jne @F
          m_MsgBox OFFSET g_szChkSvrStateFirst_cn, NULL
          xor eax, eax
          jz @BtnClkEnd
        @@:
          invoke ShowServiceInfo, SC_MANAGER_ENUMERATE_SERVICE, g_dwServiceType, g_dwServiceState
        @BtnClkEnd:
        .endif
      .ENDIF
    .endif
  .elseif uMsg==WM_DESTROY
    invoke PostQuitMessage, NULL
  .elseif uMsg==WM_SIZE
    invoke ResizeConctrol
    xor eax, eax
    jz @F
  .else
@@:
    invoke DefWindowProc, hWnd, uMsg, wParam, lParam   
    ret
  .endif
  xor eax, eax
  ret
WndProc endp

ResizeConctrol PROC
  LOCAL st_Rect: RECT

  invoke GetClientRect, g_hWndMain, ADDR st_Rect

  ;--- Resize the Enum button
  mov eax, st_Rect.right
  sub eax, 5+c_BtnShowWidth
  push eax
  invoke MoveWindow, g_hBtnShow, eax, c_BtnShowTop, c_BtnShowWidth, c_BtnShowHeight, TRUE

  ;--- Resize the service editbox
  mov eax, st_Rect.right
  sub eax, 5

  mov edi, st_Rect.bottom
  sub edi, 70

  invoke MoveWindow, g_hEditSvrInfo, c_EdtSvrInfoLeft, c_EdtSvrInfoTop, eax, edi, TRUE

  ret
ResizeConctrol ENDP


ShowServiceInfo PROC dwDesiredAccess: dword, dwServiceType: dword, dwServiceState: dword
  LOCAL hSCM, hResume, hMem: HANDLE
  LOCAL dwBytesNeeded, dwServiceNum: dword
  LOCAL lpstCurSvr: dword
  LOCAL Buf1[22]: byte

  xor eax, eax
  jz @F
  g_szERROR_ACCESS_DENIED db "The requested access was denied.", 0
  g_szERROR_DATABASE_DOES_NOT_EXIST db "The specified database does not exist.", 0
  g_szERROR_INVALID_PARAMETER db "A parameter that was specified is invalid.", 0
  g_szERROR_INVALID_HANDLE db "The specified handle is invalid.", 0
  g_szERROR_MORE_DATA  db "There are more service entries than would fit into the lpServices buffer.", 0
  g_szFailGlobalAlloc db "Fail to GlobalAlloc", 0
  g_szOpenSCManager db "Call OpenSCManager", 0
  g_szEnumServicesStatus db "Call EnumServicesStatus", 0
  g_szBlkOK db " OK!"
  g_szCR db 0dh, 0ah, 0
  g_sz3hyphens db "---", 0
  g_szFmtTotal db "Total: %d", 0
@@:
   ; SC_HANDLE OpenSCManager(
   ;   LPCTSTR lpMachineName,  // pointer to machine name string
   ;   LPCTSTR lpDatabaseName,  // pointer to database name string
   ;   DWORD dwDesiredAccess   // type of access
   ; );
  m_CatStr OFFSET g_szOpenSCManager
  invoke OpenSCManager, NULL, NULL, dwDesiredAccess
  cmp eax, NULL
  jne @F
  invoke GetLastError
  .if eax==ERROR_ACCESS_DENIED
    mov eax, OfFSET g_szERROR_ACCESS_DENIED
  .elseif eax==ERROR_DATABASE_DOES_NOT_EXIST
    mov eax, OFFSET g_szERROR_DATABASE_DOES_NOT_EXIST
  .elseif eax==ERROR_INVALID_PARAMETER
    mov eax, OFFSET g_szERROR_INVALID_PARAMETER
  .else
    mov eax, NULL
  .endif
  m_CatStr eax
  ret
@@:
  mov hSCM, eax
  m_CatStr OFFSET g_szBlkOK
  m_CatStr OFFSET g_szEnumServicesStatus

   ; BOOL EnumServicesStatus(
   ;   SC_HANDLE hSCManager,  // handle to service control manager database
   ;   DWORD dwServiceType,  // type of services to enumerate
   ;   DWORD dwServiceState,  // state of services to enumerate
   ;   LPENUM_SERVICE_STATUS lpServices,  // pointer to service status buffer
   ;   DWORD cbBufSize,  // size of service status buffer
   ;   LPDWORD pcbBytesNeeded,  // pointer to variable for bytes needed
   ;   LPDWORD lpServicesReturned,  // pointer to variable for number returned
   ;   LPDWORD lpResumeHandle   // pointer to variable for next entry
   ; );
  mov hResume, 0
  invoke EnumServicesStatus, hSCM, dwServiceType, dwServiceState,\
    NULL, NULL, ADDR dwBytesNeeded,\
    ADDR dwServiceNum, ADDR hResume
  invoke GetLastError
  cmp eax, ERROR_MORE_DATA
  je @F
@EnumServicesStatusErr:
  .if eax==ERROR_ACCESS_DENIED
    mov eax, OfFSET g_szERROR_ACCESS_DENIED
  .elseif eax==ERROR_INVALID_HANDLE
    mov eax, OFFSET g_szERROR_INVALID_HANDLE
  .elseif eax==ERROR_INVALID_PARAMETER
    mov eax, OFFSET g_szERROR_INVALID_PARAMETER
  .elseif eax==ERROR_MORE_DATA
    mov eax, OFFSET g_szERROR_MORE_DATA
  .else
    mov eax, NULL
  .endif
  m_CatStr eax
  invoke CloseServiceHandle, hSCM
  ret
@@:  
  m_CatStr OFFSET g_szBlkOK
  m_CatStr OFFSET g_szEnumServicesStatus
  invoke GlobalAlloc, GMEM_ZEROINIT, dwBytesNeeded
  cmp eax, NULL
  jnz @F
  m_CatStr OFFSET g_szFailGlobalAlloc
  invoke CloseServiceHandle, hSCM
  ret
@@:
  mov hMem, eax
  m_CatStr OFFSET g_szBlkOK
  mov hResume, 0
  invoke EnumServicesStatus, hSCM, dwServiceType, dwServiceState,\
    hMem, dwBytesNeeded, ADDR dwBytesNeeded,\
    ADDR dwServiceNum, ADDR hResume
  or eax, eax
  jnz @F
  invoke GetLastError
  push eax
  invoke GlobalFree, hMem
  pop eax
  jmp @EnumServicesStatusErr
@@:
  m_CatStr OFFSET g_sz3hyphens
  m_CatStr OFFSET g_szAppName_cn
  m_CatStr OFFSET g_sz3hyphens
  invoke wsprintf, ADDR Buf1, OFFSET g_szFmtTotal, dwServiceNum
  m_CatStr ADDR Buf1
  m_GoNextLine
  ;push edx
  mov edx, hMem
  xor eax, eax
  .while eax < dwServiceNum
    push eax
    mov lpstCurSvr, edx

    m_CatStr (ENUM_SERVICE_STATUS ptr [edx]).lpServiceName
    m_CatStr OFFSET g_sz3hyphens
    mov edx, lpstCurSvr
    m_CatStr (ENUM_SERVICE_STATUS ptr [edx]).lpDisplayName
    m_GoNextLine
    mov edx, lpstCurSvr
    lea eax, (ENUM_SERVICE_STATUS ptr [edx]).ServiceStatus
    invoke ShowSvcStatusInfo, eax
    m_GoNextLine
    mov edx, lpstCurSvr
    add edx, SIZEOF ENUM_SERVICE_STATUS
    pop eax
    inc eax
  .endw
  ;pop edx
  invoke GlobalFree, hMem
  invoke CloseServiceHandle, hSCM
  ret
ShowServiceInfo ENDP


ShowSvcStatusInfo PROC lpstSrvStatus: dword
  xor eax, eax
  jz @F
  ;--- type
  g_szSERVICE_WIN32_OWN_PROCESS db "SERVICE_WIN32_OWN_PROCESS", 0
  g_szSERVICE_WIN32_SHARE_PROCESS db "SERVICE_WIN32_SHARE_PROCESS", 0
  g_szSERVICE_KERNEL_DRIVER db "SERVICE_KERNEL_DRIVER", 0
  g_szSERVICE_FILE_SYSTEM_DRIVER  db "SERVICE_FILE_SYSTEM_DRIVER", 0
  g_szSERVICE_INTERACTIVE_PROCESS db "SERVICE_INTERACTIVE_PROCESS", 0
  g_szSvcTypeArr dword SERVICE_WIN32_OWN_PROCESS, OFFSET g_szSERVICE_WIN32_OWN_PROCESS
          dword SERVICE_WIN32_SHARE_PROCESS, OFFSET g_szSERVICE_WIN32_SHARE_PROCESS
          dword SERVICE_KERNEL_DRIVER, OFFSET g_szSERVICE_KERNEL_DRIVER
          dword SERVICE_FILE_SYSTEM_DRIVER, OFFSET g_szSERVICE_FILE_SYSTEM_DRIVER
          dword SERVICE_INTERACTIVE_PROCESS, OFFSET g_szSERVICE_INTERACTIVE_PROCESS
  c_SvcTypeArrLen equ ($ - (offset g_szSvcTypeArr)) / 8
  ;--- status
  g_szSERVICE_STOPPED  db "SERVICE_STOPPED", 0
  g_szSERVICE_START_PENDING  db "SERVICE_START_PENDING", 0
  g_szSERVICE_STOP_PENDING db "SERVICE_STOP_PENDING", 0
  g_szSERVICE_RUNNING  db "SERVICE_RUNNING", 0
  g_szSERVICE_CONTINUE_PENDING db "SERVICE_CONTINUE_PENDING", 0
  g_szSERVICE_PAUSE_PENDING  db "SERVICE_PAUSE_PENDING", 0
  g_szSERVICE_PAUSED db "SERVICE_PAUSED", 0

  g_szSvcStatusArr  dword SERVICE_STOPPED, OFFSET g_szSERVICE_STOPPED
            dword SERVICE_START_PENDING, OFFSET g_szSERVICE_START_PENDING
            dword SERVICE_STOP_PENDING, OFFSET g_szSERVICE_STOP_PENDING
            dword SERVICE_RUNNING, OFFSET g_szSERVICE_RUNNING
            dword SERVICE_CONTINUE_PENDING, OFFSET g_szSERVICE_CONTINUE_PENDING
            dword SERVICE_PAUSE_PENDING, OFFSET g_szSERVICE_PAUSE_PENDING
            dword SERVICE_PAUSED, OFFSET g_szSERVICE_PAUSED
  c_SvcStatusArrLen equ ($ - (offset g_szSvcStatusArr)) / 8

  ;---
  g_szControlsAccepted_cn db "可受控制:", 0
  g_szSERVICE_ACCEPT_STOP db "SERVICE_ACCEPT_STOP", 0
  g_szSERVICE_ACCEPT_PAUSE_CONTINUE db "SERVICE_ACCEPT_PAUSE_CONTINUE", 0
  g_szSERVICE_ACCEPT_SHUTDOWN db "SERVICE_ACCEPT_SHUTDOWN", 0
  g_szSvcAccCtlArr  dword SERVICE_ACCEPT_STOP, OFFSET g_szSERVICE_ACCEPT_STOP
            dword SERVICE_ACCEPT_PAUSE_CONTINUE, OFFSET g_szSERVICE_ACCEPT_PAUSE_CONTINUE
            dword SERVICE_ACCEPT_SHUTDOWN, OFFSET g_szSERVICE_ACCEPT_SHUTDOWN
  c_SvcAccCtlArrLen equ ($ - (offset g_szSvcAccCtlArr)) / 8
@@:

; typedef struct _SERVICE_STATUS { // ss
;   DWORD dwServiceType;
;   DWORD dwCurrentState;
;   DWORD dwControlsAccepted;
;   DWORD dwWin32ExitCode;
;   DWORD dwServiceSpecificExitCode;
;   DWORD dwCheckPoint;
;   DWORD dwWaitHint;
; } SERVICE_STATUS, *LPSERVICE_STATUS;
  ;--- ServiceType
  m_CatStr OFFSET g_szServiceType_cn
  mov eax, lpstSrvStatus
  mov eax, (SERVICE_STATUS ptr [eax]).dwServiceType
  invoke ShowSvcData, eax, OFFSET g_szSvcTypeArr, c_SvcTypeArrLen
  m_GoNextLine

  ;--- Service State
  m_CatStr OFFSET g_szServiceState_cn
  mov eax, lpstSrvStatus
  mov eax, (SERVICE_STATUS ptr [eax]).dwCurrentState
  invoke ShowSvcData, eax, OFFSET g_szSvcStatusArr, c_SvcStatusArrLen
  m_GoNextLine

  ;--- ControlsAccepted
  m_CatStr OFFSET g_szControlsAccepted_cn
  mov eax, lpstSrvStatus
  mov eax, (SERVICE_STATUS ptr [eax]).dwControlsAccepted
  invoke ShowSvcData, eax, OFFSET g_szSvcAccCtlArr, c_SvcAccCtlArrLen
  m_GoNextLine

  ret
ShowSvcStatusInfo ENDP


ShowSvcData PROC dwSvcData:DWORD, lpSvcDataArr: DWORD, dwDataArrLen: DWORD
  LOCAL lpPos: dword
  LOCAL dwIndex: dword

  mov eax, lpSvcDataArr
  mov dwIndex, 0
@ShowSvcDataLoop1:
  mov edx, dwIndex
  cmp edx, dwDataArrLen
  je @ShowSvcDataRet
  mov lpPos, eax
  mov eax, [eax]
  cmp dwSvcData, eax
  jne @F
  mov eax, lpPos
  add eax, 4
  mov eax, [eax]
  or eax, eax
  jnz @ShowSvcData
  ;jmp @ShowSvcData
@@:
  inc dwIndex
  mov eax, lpPos
  add eax, 8
  or eax, eax
  jnz @ShowSvcDataLoop1
@ShowSvcData:
  m_CatStr eax
@ShowSvcDataRet:
  ret
ShowSvcData ENDP

end start
游戏吧  http://www.game8.cc/MyBlog    http://www.asm32.cn

TOP

在我的机器上不能正常运行呢,运行后一个服务也不显示……

  Win2003 Server 英文企业版,诺顿杀毒,管理员账户。

再有一个建议:里面的中文资源能不能用Unicode来保存?不然在英文操作系统下都是乱码~
http://hi.baidu.com/anuiz anuiz#163.com

TOP

发新话题