📄 subject_60700.htm
字号:
<p>
序号:60700 发表者:swiq 发表日期:2003-11-14 19:43:31
<br>主题:关于读系统日志的几个问题
<br>内容:以下是一段在网上看到的读系统日志的程序代码,对于这段程序,我调试后,有几个问题不明白,向大家请教一下:<BR><BR> HANDLE hdle;<BR> EVENTLOGRECORD *ptr;<BR> BYTE buff[4096]; //注:第二个问题;<BR> DWORD read_len, next_len;<BR> ptr=(EVENTLOGRECORD *)&buff;<BR> hdle=OpenEventLog("", "Application");// System<BR> if (hdle==NULL)<BR> {<BR> MessageBox("打开日志失败");<BR> }<BR> else <BR> {<BR> long mRet;<BR> char lpszSourceName[255]={0};<BR> char lpszComputerName[255]={0};<BR> unsigned uStepOfString;<BR> char* pStrings;<BR> char szExpandedString[1024]={0};<BR> while(ReadEventLog(hdle,EVENTLOG_FORWARDS_READ|EVENTLOG_SEQUENTIAL_READ,<BR> 1,ptr,sizeof(buff),&read_len,&next_len)) <BR> {<BR> mRet=ptr->EventID;//事件id<BR> mRet=ptr->EventType;//事件类型<BR> mRet=ptr->TimeWritten;//<BR> mRet=ptr->NumStrings;//<BR> mRet=ptr->Length;//<BR> mRet=sizeof(EVENTLOGRECORD);<BR> strcpy(lpszSourceName, (LPTSTR)((LPBYTE)ptr +mRet));//事件源<BR> mRet+= strlen(lpszSourceName) + 1;<BR> strcpy(lpszComputerName, (LPTSTR)((LPBYTE)ptr + mRet));//机器名<BR> mRet+= strlen(lpszComputerName) + 1;<BR> if(ptr->UserSidLength>0){;}//<BR> mRet=ptr->DataOffset-ptr->StringOffset;<BR> if(mRet>0)//事件描述<BR> {<BR> pStrings=new char[mRet];<BR> memcpy(pStrings,(LPBYTE)ptr+ptr->StringOffset,mRet);<BR> uStepOfString=0;<BR> for(int x=0;x<ptr->NumStrings;x++)<BR> {<BR> if(x==0)<BR> {<BR> strcpy(szExpandedString, (TCHAR *)pStrings + uStepOfString);<BR> if(x<(UINT)ptr->NumStrings - 1)strcat(szExpandedString, ",");<BR> }<BR> else strcat(szExpandedString, pStrings + uStepOfString);<BR> uStepOfString = strlen(pStrings + uStepOfString) + 1;<BR> }<BR> delete [] pStrings;<BR> }<BR> MessageBox(lpszSourceName,szExpandedString);<BR> }<BR> CloseEventLog(hdle);<BR> }<BR><BR><BR>问题如下:<BR>1。我现在能够找到日志事件的“类型”,“时间”,“日期”,“来源”,“事件”,“计算机”等几个项,但是找不到“分类”和“用户”两项,不知道这两项在EVENTLOGRECORD结构中的哪个位置上? 这里所提到的项是指从windows的事件查看器中所对应的项目。<BR>2。按照上面的程序运行,我只能读出几十条日志。但在改变buff的大小后,发现buff越大,则读出来的日志条数越少,当buff在256或512时,读出的条数最多,可以达到近两百条,再小的话,又不行了。但是不管怎么样,也读不出我机子里总共有500多条的日志记录啊。而且读日志是从最早的开始读起,这样,最近出现的日志怎么也读不到。有什么办法能把在“事件查看器”中所看到的所有日志都读出来呢?<BR><BR>以上问题请大家多指教!<BR>谢谢!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:Solon 回复日期:2003-11-14 22:20:10
<br>内容:例子
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:swiq 回复日期:2003-11-14 22:25:02
<br>内容:谢谢!不过你给的例子中相关代码与我上面的代码是一模一样的,也没有解决我提出 的两个问题。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -