如何读取windows日志?

supermana 2011-12-07 05:33:56
请问如何用bcb读取windows的系统、安全性、应用程序日志,读取后添加到Memo中?请指教
...全文
344 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
5t4rk 2012-02-19
  • 打赏
  • 举报
回复
用windows API就可以的

参考代码 如下

for (i=0; i<nLogNum; i++ )
{
// Open the event log.
hEvent = OpenEventLog(pServerName, // use local computer
szLogName[i]); // source name
if (hEvent == NULL)
printf("Could not open the %s event log.\n", szLogName[i]);

pevlr = (EVENTLOGRECORD *) &szBuffer;

// Opening the event log positions the file pointer for this
// handle at the beginning of the log. Read the records
// sequentially until there are no more.

while (ReadEventLog(hEvent, // event log handle
EVENTLOG_FORWARDS_READ | // reads forward
EVENTLOG_SEQUENTIAL_READ, // sequential read
0, // ignored for sequential reads
pevlr, // pointer to buffer
BUFFER_SIZE, // size of buffer
&dwRead, // number of bytes read
&dwNeeded)) // bytes in next record
{
while (dwRead > 0)
{

mRet = sizeof(EVENTLOGRECORD);

strcpy(lpszSourceName, (LPTSTR)((LPBYTE)pevlr +mRet));//事件源


//fprintf(fd,"%s", lpszSourceName);

mRet += strlen(lpszSourceName) + 1;
strcpy(lpszComputerName, (LPTSTR)((LPBYTE)pevlr + mRet));//机器名
mRet += strlen(lpszComputerName) + 1;
if(pevlr->UserSidLength>0)
{;}
mRet = pevlr->DataOffset - pevlr->StringOffset;


if(mRet>0)//事件描述
{
//pStrings = new char[mRet];
///////////////////////////////////////////////////////////
pStrings = (LPBYTE)GlobalAlloc(GPTR, mRet * sizeof(BYTE));
memcpy(pStrings,(LPBYTE)pevlr+pevlr->StringOffset,mRet);
uStepOfString=0;

szExpandedString = (TCHAR*)GlobalAlloc(GPTR, (mRet + 1024) * sizeof(TCHAR));
for(unsigned int x=0;x<pevlr->NumStrings;x++)
{
if(x == 0)
{
strcpy(szExpandedString, (TCHAR *)pStrings + uStepOfString);
if(x<(UINT)pevlr->NumStrings - 1)
strcat(szExpandedString, ",");
}
else
strcat(szExpandedString, (TCHAR*)pStrings + uStepOfString);
uStepOfString = strlen((TCHAR*)pStrings + uStepOfString) + 1;
}
//************************************************************************************
laowang2 2012-02-03
  • 打赏
  • 举报
回复
先用vc试试看
skolar 2012-02-03
  • 打赏
  • 举报
回复
妖哥。。。膜拜
cankoo 2011-12-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ccrun 的回复:]

再补充一下,我刚才的回答过程是这样:

看帖子-->复制标题关键词-->打开Google-->输入:
site:csdn.net VC Windows 日志

回车,然后。。。。复制一个链接过来,就OK了。
[/Quote]
妖哥神勇!!!朝圣。。。
supermana 2011-12-08
  • 打赏
  • 举报
回复
妖哥:http://www.codeproject.com/KB/system/sysevent.aspx这个代码 我也试过,但没调通,因此才在CSND发帖求助,请大侠们指点,我比较笨,妖哥帮帮忙吧。
ccrun.com 2011-12-07
  • 打赏
  • 举报
回复
饭毕归来,刚找了找资料,发现工作量太大,我就抱歉一次,不帮你调试了,不过帮你找到一个很靠谱的参考资料:

http://www.codeproject.com/KB/system/sysevent.aspx
ccrun.com 2011-12-07
  • 打赏
  • 举报
回复
OK, 你等我一会。我给你搞一段代码。
supermana 2011-12-07
  • 打赏
  • 举报
回复
感谢妖哥的回答,这段代码我在bcb试过,应用程序日志显示的杂乱无章,系统日志只显示一条,可能是我的水平太低,我的想法是在Memo中显示的结果和事件管理器的日志内容一样,请妖哥百忙之中给一段bcb的代码,VC我不熟,谢谢。
ccrun.com 2011-12-07
  • 打赏
  • 举报
回复
再补充一下,我刚才的回答过程是这样:

看帖子-->复制标题关键词-->打开Google-->输入:
site:csdn.net VC Windows 日志

回车,然后。。。。复制一个链接过来,就OK了。
ccrun.com 2011-12-07
  • 打赏
  • 举报
回复
Windows系统提供了访问日志的API。
随便搜一个例子:

http://www.vckbase.com/document/viewdoc/?id=428

另外,给楼主一个建议,善用Google,可以大大的提高工作效率。要找H片,请用百毒。

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧