• USB. Узнать метку диска по серийному номеру

    DVamp1r3
    @DVamp1r3 Автор вопроса
    Да, сначала идет уведомление о подключении устройства, а потом монтирование ОС. Моя ошибка заключалась в том, что про вызове функции RegisterDeviceNotification я передавал ей неправильный GUID {a5dcbf10-6530-11d2-901f-00c04fb951ed}. Вот этот материал натолкнул меня на использование верного {53f56307-b6bf-11d0-94f2-00a0c91efb8b}. При использовании верного GUID можно обрабатывать оба сообщения. Выкладываю код непосредственно того, что мне было нужно:
    HDEVNOTIFY USBRegister(HWND hWnd) // Передать дескриптор нужного окна
    {
    	DEV_BROADCAST_DEVICEINTERFACE dbi = { sizeof(dbi), DBT_DEVTYP_DEVICEINTERFACE };
    	CLSIDFromString(L"{53f56307-b6bf-11d0-94f2-00a0c91efb8b}", &dbi.dbcc_classguid);
    	return RegisterDeviceNotification((HANDLE)hWnd, &dbi, DEVICE_NOTIFY_WINDOW_HANDLE);
    }
    
    LRESULT CALLBACK _WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {	
    	switch (message)
    	{		
    	case WM_DEVICECHANGE:
    		 if (DBT_DEVICEARRIVAL == wParam) 
    		 {
    			PDEV_BROADCAST_HDR pHdr = (PDEV_BROADCAST_HDR)lParam;
    			PDEV_BROADCAST_DEVICEINTERFACE pDevInf = (PDEV_BROADCAST_DEVICEINTERFACE)pHdr;
    			PDEV_BROADCAST_VOLUME pDevVolume = (PDEV_BROADCAST_VOLUME)pHdr;
    			char i;
    			switch( pHdr->dbch_devicetype ) 
    			{
    				case DBT_DEVTYP_DEVICEINTERFACE: // Подключение устройства
    					break;
    
    				case DBT_DEVTYP_VOLUME: // Монтирование ФС
    					for (i = 0; i < 26; ++i)
    					{
    						if (pDevVolume->dbcv_unitmask & 0x1)
    						break;
    						pDevVolume->dbcv_unitmask = pDevVolume->dbcv_unitmask >> 1;
    					}
    
    					i += 'A'; // Получение буквы
    					break;
    			}
    		}
    		return 0;
    	 default:
                return DefWindowProc(hWnd, message, wParam, lParam);	
    
    	}
    
    	return 0;
    }
    
  • USB. Узнать метку диска по серийному номеру

    DVamp1r3
    @DVamp1r3 Автор вопроса
    Внесу некоторые поправки, данный пример для только для дисков. Используется другая структура для перехвата информации (DEV_BROADCAST_VOLUME). Так что пример подходит только для дисководов.
  • USB. Узнать метку диска по серийному номеру

    DVamp1r3
    @DVamp1r3 Автор вопроса
    Detecting Media Insertion or Removal — оно.
    С Win32_LogicalDisk работал ранее из .NET, к сожалению, все кроме буквы диска.
  • ПО для авторизации по USB?

    DVamp1r3
    @DVamp1r3 Автор вопроса
    Никто не мешает, вопрос не в этом.
  • Какова вероятность подхватить трояна скачивая Mac-софт с торрентов?

    DVamp1r3
    @DVamp1r3
    Все отзывы как правильно совпадают с мнением установленного на ПК антивируса и/или фаервола. А они не всегда верны. Не думаю что «продвинутый народ» начнет копать инсталлятор. Максимум — сканирование или отправка на вирустотал.
    Но, в случае с маком, ситуация конечно менее опасна но не исключена.