WEB开发网
开发学院软件开发VC 如何读写WINDOWS2000的日志 阅读

如何读写WINDOWS2000的日志

 2006-07-19 11:37:24 来源:WEB开发网   
核心提示: void CEventDlg::OnButton3(){//参考http://www.codeproject.com/system/sysevent.aspHANDLE hdle;EVENTLOGRECORD *ptr;BYTE buff[4096];DWORD read_len, nex
void CEventDlg::OnButton3()
{//参考http://www.codeproject.com/system/sysevent.asp
  HANDLE hdle;
  EVENTLOGRECORD *ptr;
  BYTE buff[4096];
  DWORD read_len, next_len;
  ptr=(EVENTLOGRECORD *)&buff;
  hdle=OpenEventLog("", "Application");// System
  if (hdle==NULL)
  {
    MessageBox("打开日志失败");
  }
  else
  {
    long mRet;
    char lpszSourceName[255]={0};
    char lpszComputerName[255]={0};
    unsigned uStepOfString;
    char* pStrings;
    char szExpandedString[1024]={0};
    while(ReadEventLog(hdle,EVENTLOG_FORWARDS_READ|EVENTLOG_SEQUENTIAL_READ,
      1,ptr,sizeof(buff),&read_len,&next_len))
    {
      mRet=ptr->EventID;//事件id
      mRet=ptr->EventType;//事件类型
      mRet=ptr->TimeWritten;//
      mRet=ptr->NumStrings;//
      mRet=ptr->Length;//
      mRet=sizeof(EVENTLOGRECORD);
      strcpy(lpszSourceName, (LPTSTR)((LPBYTE)ptr +mRet));//事件源
      mRet+= strlen(lpszSourceName) + 1;
      strcpy(lpszComputerName, (LPTSTR)((LPBYTE)ptr + mRet));//机器名
      mRet+= strlen(lpszComputerName) + 1;
      if(ptr->UserSidLength>0){;}//
      mRet=ptr->DataOffset-ptr->StringOffset;
      if(mRet>0)//事件描述
      {
        pStrings=new char[mRet];
        memcpy(pStrings,(LPBYTE)ptr+ptr->StringOffset,mRet);
        uStepOfString=0;
        for(int x=0;x<ptr->NumStrings;x++)
        {
          if(x==0)
          {
            strcpy(szExpandedString, (TCHAR *)pStrings + uStepOfString);
            if(x<(UINT)ptr->NumStrings - 1)strcat(szExpandedString, ",");
          }
          else strcat(szExpandedString, pStrings + uStepOfString);
          uStepOfString = strlen(pStrings + uStepOfString) + 1;
        }
        delete [] pStrings;
      }
      MessageBox(lpszSourceName,szExpandedString);
    }
    CloseEventLog(hdle);
  }
}

五.源代码的使用与运行结果

本文附带的示例工程对WIN2K日志的读写进行了演示,使用时先编译mydll,并拷贝到system目录下,然后编译event工程。运行结果可以使用事件查看器查看:

假如在指定的位置没有找到mydll,则会显示:

事件 ID ( 1001 )的描述(在资源( CMCard )中)无法找到。本地计算机可能没有必要的注册信息或消息 DLL 文件来从远端计算机显示消息。部分事件包含了下列信息: king_koo

Hello!.

六.后记

以上演示了读写win2k日志的基本方法,重在应用.想知道更理论/更详尽的东西,就只有再认真研究msdn了.

另:读日志好麻烦,谁知道更简捷的方法麻烦告诉我一声.欢迎指点/批评(king_koo@163.net)

上一页  1 2 3 

Tags:如何 读写 WINDOWS

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接