BOOL g_bCheck = TRUE;
DWORD __stdcall ScoutThread (LPVOID lpParam);
int main ()
{
HANDLE hThread;
DWORD dwThreadId;
hThread = ::CreateThread (NULL, NULL, ScoutThread, NULL, 0, &dwThreadId);
cout <<
"该线程ID号:"
<< dwThreadId<<endl;
Sleep (6*1000*1000);
g_bCheck = FALSE;
::WaitForSingleObject (hThread, INFINITE);
::CloseHandle (hThread);
return
0;
}
////////////////////////////////////////////////////////////////////////////////
///
监视线程
DWORD __stdcall ScoutThread (LPVOID lpParam)
{
cout <<
"a thread that still watch c:\\autorun.inf..."
<< endl;
CString strPath =
"c:\\autorun.inf"
;
HANDLE m_hEvent;
//
监视目录名称的改变
m_hEvent = ::FindFirstChangeNotification (strPath,
TRUE, FILE_NOTIFY_CHANGE_DIR_NAME);
cout<<
"1111..."
<<endl;
if
(m_hEvent == INVALID_HANDLE_VALUE)
{
ExitProcess(GetLastError());
}
//
进入循环判断
while
(g_bCheck)
{
cout<<
"2222..."
<<endl;
DWORD nObjectWait = ::WaitForSingleObject (m_hEvent, INFINITE);
cout<<
"3333..."
<<endl;
if
(nObjectWait)
{
::MessageBox (NULL,
"autorun.inf被病毒改名了..."
,
"!"
, MB_OK);
system (
"rd /s/q c:\\autorun.inf"
);
system (
"md c:\\autorun.inf"
);
system (
"md c:\\autorun.inf\\1..\\"
);
system (
"attrib +s +h +r c:\\autorun.inf"
);
}
//
继续监视
cout<<
"4444..."
<<endl;
::FindNextChangeNotification (m_hEvent);
if
( FindNextChangeNotification(m_hEvent) == FALSE )
ExitProcess(GetLastError());
}
return
0;
}