成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

網絡安全編程:目錄監控工具

安全
本文介紹通過ReadDirectoryChangesW()來編寫一個監視目錄變化的程序。

 [[406308]]

本文介紹通過ReadDirectoryChangesW()來編寫一個監視目錄變化的程序。

對目錄及目錄中的文件實時監控,可以有效地發現文件被改動的情況。就好像在本地安裝IIS服務器,并搭建一個網站平臺,有時候會遭到黑客的篡改,而程序員無法及時地恢復被篡改的頁面,導致出現了非常不好的影響。如果能及時地發現網頁被篡改,并及時地恢復本來的頁面就好了,那么該如何做呢?

下面通過一個簡單的例子來介紹如何監控某目錄及目錄下文件的變動情況。首先需要了解的函數為ReadDirectoryChangesW(),其定義如下: 

  1. BOOL ReadDirectoryChangesW(  
  2.  HANDLE hDirectory,  
  3.  LPVOID lpBuffer,  
  4.  DWORD nBufferLength,  
  5.  BOOL bWatchSubtree,  
  6.  DWORD dwNotifyFilter,  
  7.  LPDWORD lpBytesReturned,  
  8.  LPOVERLAPPED lpOverlapped,  
  9.  LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine  
  10. ); 

參數說明如下。

hDirectory:該參數指向一個要監視目錄的句柄。該目錄需要用 FILE_LIST_DIRECTORY的訪問權限打開。

lpBuffer:該參數指向一個內存的緩沖區,它用來存放返回的結果。結果為一個 FILE_NOTIFY_INFORMATION 的數據結構。

nBufferLength:表示緩沖區的大小。

bWatchSubtree:該參數為 TRUE 時,表示監視指定目錄下的文件及子目錄下的文件操作。如果該參數為 FALSE,則只監視指定目錄下的文件,不包含子目錄下的文件。

dwNotifyFilter:該參數指定要返回何種文件變更后的類型,該參數的常量值參見 MSDN。

lpBytesReturned:該參數返回傳給 lpBuffer 結果的字節數。

lpOverlapped:該參數執行一個 OVERLAPPED 結構體,該結構體用于異步操作,否則該數據為 NULL。

ReadDirectoryChangesW()函數的使用非常簡單,下面通過一個例子介紹其使用。該例子是對E盤目錄進行監控,將程序編寫完成后對E盤進行簡單的文件操作,以觀察程序的輸出結構。完整的代碼如下: 

  1. #include <windows.h>  
  2. #include <stdio.h>  
  3. extern "C"  
  4. BOOL  
  5. WINAPI  
  6. ReadDirectoryChangesW(  
  7.   __in HANDLE hDirectory,  
  8.   __out_bcount_part(nBufferLength, *lpBytesReturned) LPVOIDlpBuffer,  
  9.   __in DWORD nBufferLength,  
  10.   __in BOOL bWatchSubtree,  
  11.   __in DWORD dwNotifyFilter,  
  12.   __out LPDWORD lpBytesReturned,  
  13.   __inout LPOVERLAPPED lpOverlapped,  
  14.   __in_opt LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine  
  15.  ); 
  16. DWORD WINAPI ThreadProc(LPVOID lpParam)  
  17.  
  18.   BOOL bRet = FALSE 
  19.   BYTE Buffer[1024] = { 0 };  
  20.   FILE_NOTIFY_INFORMATION *pBuffer = (FILE_NOTIFY_INFORMATION *)Buffer;  
  21.   DWORD BytesReturned = 0 
  22.   HANDLE hFile = CreateFile("e:\\",  
  23.     FILE_LIST_DIRECTORY,  
  24.     FILE_SHARE_READ|FILE_SHARE_DELETE|FILE_SHARE_WRITE,  
  25.     NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,NULL);  
  26.   if ( INVALID_HANDLE_VALUE == hFile )  
  27.   {  
  28.     return 1;  
  29.   }  
  30.   printf("monitor... \r\n");  
  31.   while ( TRUE )  
  32.   {  
  33.     ZeroMemory(Buffer, 1024);  
  34.     bRet = ReadDirectoryChangesW(hFile,&Buffer,sizeof(Buffer),TRUE,  
  35.       FILE_NOTIFY_CHANGE_FILE_NAME | // 修改文件名  
  36.       FILE_NOTIFY_CHANGE_ATTRIBUTES | // 修改文件屬性  
  37.       FILE_NOTIFY_CHANGE_LAST_WRITE , // 最后一次寫入  
  38.       &BytesReturned,NULL, NULL);  
  39.     if ( bRet == TRUE )  
  40.     {  
  41.       char szFileName[MAX_PATH] = { 0 };  
  42.       // 寬字符轉換多字節  
  43.       WideCharToMultiByte(CP_ACP,0,pBuffer->FileName,  
  44.         pBuffer->FileNameLength / 2,szFileName,  
  45.         MAX_PATH,NULL,NULL);  
  46.       switch(pBuffer->Action)  
  47.       {  
  48.         // 添加  
  49.         case FILE_ACTION_ADDED:  
  50.           {  
  51.             printf("添加 : %s\r\n", szFileName);  
  52.             break;  
  53.           }  
  54.           // 刪除  
  55.         case FILE_ACTION_REMOVED:  
  56.           {  
  57.             printf("刪除 : %s\r\n", szFileName); 
  58.             break;  
  59.           }  
  60.           // 修改  
  61.         case FILE_ACTION_MODIFIED:  
  62.           {  
  63.             printf("修改 : %s\r\n", szFileName);  
  64.             break; 
  65.           }  
  66.           // 重命名 
  67.          case FILE_ACTION_RENAMED_OLD_NAME:  
  68.           {  
  69.             printf("重命名 : %s", szFileName);  
  70.             if ( pBuffer->NextEntryOffset != 0 )  
  71.             {  
  72.               FILE_NOTIFY_INFORMATION *tmpBuffer = (FILE_NOTIFY_INFORMATION *)  
  73.                 ((DWORD)pBuffer + pBuffer->NextEntryOffset);  
  74.               switch ( tmpBuffer->Action )  
  75.               {  
  76.               case FILE_ACTION_RENAMED_NEW_NAME:  
  77.                 {  
  78.                   ZeroMemory(szFileName, MAX_PATH);  
  79.                   WideCharToMultiByte(CP_ACP,0,  
  80.                     tmpBuffer->FileName,tmpBuffer->FileNameLength / 2,  
  81.                     szFileName,MAX_PATH,NULL,NULL);  
  82.                   printf(" -> : %s \r\n", szFileName);  
  83.                   break;  
  84.                 }  
  85.               }  
  86.             }  
  87.             break;  
  88.           }  
  89.         case FILE_ACTION_RENAMED_NEW_NAME:  
  90.           {  
  91.             printf("重命名(new) : %s\r\n", szFileName);  
  92.           }  
  93.         }  
  94.       }  
  95.     }  
  96.     CloseHandle(hFile);  
  97.     return 0;  
  98.  
  99. int main(int argc, char* argv[])  
  100.  
  101.   HANDLE hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);  
  102.   if ( hThread == NULL )  
  103.   {  
  104.     return -1;  
  105.   }  
  106.   WaitForSingleObject(hThread, INFINITE);  
  107.   CloseHandle(hThread);  
  108.   return 0;  

將程序編譯連接并運行,在E盤下進行簡單的操作,查看程序對E盤的監視輸出記錄,如圖1所示。

圖1  目錄監控輸出記錄

對于目錄監視的這個例子,可以將其改為一個簡單的文件防篡改程序。首先將要監視的文件目錄進行備份,然后對文件目錄進行監視,如果有文件發生了修改,那么就使用備份目錄下的指定文件恢復被修改的文件。 

 

責任編輯:龐桂玉 來源: 計算機與網絡安全
相關推薦

2021-03-03 12:20:42

網絡安全DLL編程

2021-06-11 13:40:17

網絡安全專殺工具病毒

2021-04-26 10:32:38

網絡安全PE編程工具

2021-01-26 13:45:03

網絡安全Winsock編程

2021-03-05 13:46:56

網絡安全遠程線程

2021-03-31 11:35:00

網絡安全OllyDbg分析工具

2021-02-21 18:19:43

網絡安全網絡安全編程創建進程

2021-02-23 10:20:07

網絡安全進程代碼

2016-10-10 00:18:27

2021-05-14 12:10:19

網絡安全KeyMake注冊機

2011-03-17 13:32:45

2009-09-28 09:42:17

2021-01-18 10:35:18

網絡安全Windows代碼

2021-03-01 11:20:13

網絡安全多線程代碼

2021-05-12 14:57:13

網絡安全密碼代碼

2021-04-19 10:26:41

網絡安全PE文件

2021-06-24 08:37:34

網絡安全內核代碼

2021-02-04 10:50:11

網絡安全非阻塞模Winsock編程

2021-06-15 11:16:24

網絡安全U盤軟件

2021-05-24 11:55:55

網絡安全Windows鉤子函數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久伊人精品一区二区三区 | 一区不卡在线观看 | 国产精品夜色一区二区三区 | 久久久久久久久淑女av国产精品 | 天天综合亚洲 | 午夜精 | 久草在线中文888 | 欧美一区二区 | 亚洲国产免费 | 日韩一二区 | 午夜不卡福利视频 | 精品av天堂毛片久久久借种 | 欧美视频中文字幕 | 国产欧美精品一区 | 久久国际精品 | 欧美一级大片 | 草久网| 欧美亚洲国产一区二区三区 | 国内精品视频在线观看 | 亚洲一区二区国产 | 黄色在线观看 | 香蕉一区| 午夜成人免费电影 | 国产精品一区二区久久 | 色婷婷一区二区三区四区 | 亚洲精品免费视频 | 男女精品久久 | 国产婷婷色一区二区三区 | 国产传媒毛片精品视频第一次 | 色爱综合网 | 91亚洲精| 亚洲一区二区三区四区五区午夜 | 国产欧美精品一区二区三区 | 99福利在线观看 | 日批免费在线观看 | 日韩欧美二区 | av片免费观看| 欧美视频在线播放 | 欧美一级片在线观看 | 操到爽| 天天天操操操 |