簡體   English   中英

無法使用C ++中的Windows服務檢索可移動設備上的數據

[英]Unable to retrieve data on a removable device using a Windows service in C++

我試圖檢測可移動設備的插入並使用NT服務檢索所述設備的驅動器號。 我已成功檢測到設備的插入和刪除,但無法設置DEV_BROADCAST_VOLUME結構,這將允許我從卷中獲取驅動器號,GUID等。

case SERVICE_CONTROL_DEVICEEVENT:{
            switch(evtype){
            case DBT_DEVICEARRIVAL:{
                    DEV_BROADCAST_VOLUME *hdr = (DEV_BROADCAST_VOLUME*) evdata;
                    ofstream log ("C:\\log.txt", ios::app);
                    log << hdr->dbcv_devicetype;
                    log.close();
                }
                break;

上面的代碼片段編譯並正確運行,但是當我插入一個閃存驅動器時, hdr->dbcv_devicetype日志值為55555DBT_DEVTYP_VOLUME (這是一個USB驅動器)被定義為2hdr->dbcv_devicetype應該等於DBT_DEVTYP_VOLUME因為我插了一個閃存盤)。 由於某種原因, DBT_DEVTYP_VOLUME沒有正確初始化,或者我正在做的其他事情是錯誤的。 我使用Windows 7與Visual Studio 2011 C ++。

嘗試這個:

  PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)evdata;
  if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME)
   {
    PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;

    if (lpdbv -> dbcv_flags & DBTF_MEDIA)
     {
      StringCchPrintf( szMsg, sizeof(szMsg)/sizeof(szMsg[0]), 
                       TEXT("Drive %c: Media has arrived.\n"), 
                       FirstDriveFromMask(lpdbv ->dbcv_unitmask) );

      MessageBox( hwnd, szMsg, TEXT("WM_DEVICECHANGE"), MB_OK );
     }
   }

   /*------------------------------------------------------------------
      FirstDriveFromMask( unitmask )

      Description
        Finds the first valid drive letter from a mask of drive letters.
        The mask must be in the format bit 0 = A, bit 1 = B, bit 2 = C, 
        and so on. A valid drive letter is defined when the 
        corresponding bit is set to 1.

      Returns the first drive letter that was found.
   --------------------------------------------------------------------*/

   char FirstDriveFromMask( ULONG unitmask )
    {
     char i;

     for (i = 0; i < 26; ++i)
      {
       if (unitmask & 0x1)
         break;
       unitmask = unitmask >> 1;
      }

     return( i + 'A' );
   }

代碼從檢測媒體插入或刪除中拉出

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM