⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 向event log中写入数据.txt

📁 会变语言实现的一些程序
💻 TXT
字号:
向Event Log中写入数据 
相关的例子:下载>>>  作者:山原依纲 于2008-8-17上传   

--------------------------------------------------------------------------------

某天突发奇想,决定考察一番Windows XP的Event Log。网上这方面的资料很少,汇编语言的资料几乎就是空白。

本文对Event Log只是浅尝辄止,希望本文对有这方便需求的朋友有所帮助。

基于 Windows XP 的计算机将事件记录在以下三种日志中: 

1. 应用程序日志 

应用程序日志包含由程序记录的事件。例如,数据库程序可能在应用程序日志中记录文件错误。写入到应用程序
日志中的事件是由软件程序开发人员确定的。 

2. 安全日志 

安全日志记录有效和无效的登录尝试等事件,以及与资源使用有关的事件(如创建、打开或删除文件)。例如,

在启用登录审核的情况下,每当用户尝试登录到计算机上时,都会在安全日志中记录一个事件。您必须以 Administrator 

或 Administrators 组成员的身份登录,才能打开、使用安全日志以及指定将哪些事件记录在安全日志中。 

3. 系统日志 

系统日志包含 Windows XP 系统组件所记录的事件。例如,如果在启动过程中未能加载某个驱动程序,则会在

系统日志中记录一个事件。Windows XP 预先确定由系统组件记录的事件。 

本文,我们专注于第一类应用程序日志,介绍如何写入一条EventLog。Windows使用ReportEvent 报告应用程序消息,

下面就对这个函数做点简单的介绍。



    HANDLE hEventLog,  // RegisterEventSource返回的handle  
    WORD wType,  // 要记录的事件类型  
    WORD wCategory,  // 事件种类  
    DWORD dwEventID,  // 事件标示  
    PSID lpUserSid,  // 用户安全标示(可选)  
    WORD wNumStrings,  // 消息的字符串数  
    DWORD dwDataSize,  // 以字节为单位的二进制数据的大小  
    LPCTSTR *lpStrings,  // 消息本身  
    LPVOID lpRawData   // 二进制数据 
   );   
 


Parameters

hEventLog 
事件标志。这个是 RegisterEventSource 返回的handle. 

wType 
事件的类型。可以是如下中的一个:
Value     Meaning 
EVENTLOG_ERROR_TYPE     Error event 
EVENTLOG_WARNING_TYPE     Warning event 
EVENTLOG_INFORMATION_TYPE     Information event 
EVENTLOG_AUDIT_SUCCESS     Success Audit event 
EVENTLOG_AUDIT_FAILURE     Failure Audit event 

wCategory 
指出消息种类。这个地方是由源自己定义的,可以是任何值。 

dwEventID 
事件标识。根据我的理解,这里的标识在使用时,会又源解释为具体的含义。比如:2001表示文件打开错误等等。
因此,要想设定完整的Event Log还需要在系统中注册一个解释的服务程序。示例程序并没有设计这个服务,
读者可以参考另外的那个VB程序。 

lpUserSid 
指向用户安全标示。当不需要安全标示时,该参数可以为NULL. 

wNumStrings 
给定lpStrings 指向的数组中字符串组的数量。0表示当前没有字符串组。 

dwDataSize 
给出将写入Evenet Log的数据的大小,以字节为单位。如果这个参数为0,表示当前没有事件数据。 

lpStrings 
指向一个缓冲区,其中是一个以0为结尾的字符串数组,这个数组将会添加到消息中。即使dwDataSize 参数为0,
这个参数也必须是有效的指针(或者为NULL)。数组中每个字符串最大为32K 字节。 

lpRawData 
指向包含二进制数据的缓冲区。即使dwDataSize 参数为0,该项也必须是一个有效的指针(或者为NULL).

Return Values
如果执行成功,返回非零值,表示事件入口已经写入日志。
如果执行不成功,返回0. 


通过上面这个简单的API,我们就可以实现写入Event Log的功能:

;MASMPlus 代码模板 - 普通的 Windows 程序代码

.386
.Model Flat, StdCall
Option Casemap :None

Include windows.inc
Include user32.inc
Include kernel32.inc
Include gdi32.inc
Include advapi32.inc

includelib gdi32.lib
IncludeLib user32.lib
IncludeLib kernel32.lib
IncludeLib advapi32.lib
include macro.asm
    
    WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
    WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
    
.DATA
    szClassName db "MASMPlus_Class",0
    
.DATA?
    hInstance    dd ?
    
.CODE
START:

    invoke GetModuleHandle,NULL
    mov hInstance,eax
    invoke WinMain,hInstance,NULL,NULL,SW_SHOWDEFAULT
    invoke ExitProcess,0

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 or CS_BYTEALIGNWINDOW
    mov wc.lpfnWndProc,offset WndProc
    mov wc.cbClsExtra,NULL
    mov wc.cbWndExtra,NULL
    push hInst
    pop wc.hInstance
    mov wc.hbrBackground,COLOR_BTNFACE+1
    mov wc.lpszMenuName,NULL
    mov wc.lpszClassName,offset szClassName
    invoke LoadIcon,hInst,100
    mov wc.hIcon,eax
    invoke LoadCursor,NULL,IDC_ARROW
    mov wc.hCursor,eax
    mov wc.hIconSm,0
    invoke RegisterClassEx, ADDR wc
    invoke CreateWindowEx,NULL,ADDR szClassName,CTXT("http://www.aogosoft.com"),WS_OVERLAPPEDWINDOW,200,200,400,200,NULL,NULL,hInst,NULL
    mov hWnd,eax
    invoke ShowWindow,hWnd,SW_SHOWNORMAL
    invoke UpdateWindow,hWnd
    
    StartLoop:
        invoke GetMessage,ADDR msg,NULL,0,0
            cmp eax, 0
            je ExitLoop
                invoke TranslateMessage, ADDR msg
                invoke DispatchMessage, ADDR msg
            jmp StartLoop
    ExitLoop:
    
mov eax,msg.wParam
ret
WinMain endp

WndProc proc hWin:DWORD,uMsg:DWORD,wParam :DWORD,lParam :DWORD
LOCAL    hEventLog:DWORD
    .if uMsg==WM_CREATE
        invoke RegisterEventSource,NULL,CTXT("VBRuntime") ;错误类型,我们借用 VBRuntime
        mov    hEventLog,eax         
        invoke ReportEvent,hEventLog,EVENTLOG_WARNING_TYPE,1003,0,NULL,0,9,NULL,CTXT('Hello Ken')
                            ; 警告类型 随便给的ID 9个字节长度的字符串
        .if eax==0
            invoke     MessageBox,hWin,CTXT("Fail"),NULL,MB_APPLMODAL
        .endif
        invoke DeregisterEventSource,hEventLog
        .elseif uMsg == WM_DESTROY
        invoke PostQuitMessage,NULL
    .else
        invoke DefWindowProc,hWin,uMsg,wParam,lParam
    .endif
    ret
WndProc endp

END START

  





参考:
1.    http://msdn.microsoft.com/en-us/library/aa363679(VS.85).aspx ReportEvent Function
2.    http://www.piclist.com/tecHREF/os/win/api/win32/func/src/f74_6.htm ReportEvent




--------------------------------------------------------------------------------
<<<上一篇  欢迎访问AoGo汇编小站:http://www.aogosoft.com 下一篇>>>  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -