информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыПортрет посетителяСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / beginners
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
а как узнать GUID конкретного подключенного устройства ? 11.01.05 00:24  Число просмотров: 5972
Автор: eug Статус: Незарегистрированный пользователь
Отредактировано 11.01.05 00:27  Количество правок: 1
<"чистая" ссылка>
> это просто мой GUID, где он определен - не важно. см MSDN и
> PlatformSDK на предмет "DEFINE_GUID".

а как узнать GUID конкретного подключенного устройства ?
а то я всё реджистри уже облазил, и нахожу только GUID для классов устройств
[подобные в постах выше]

> вполне реально добраться до file-handle к устройству
> (экземпляру класса), а потом через IOCTL (если такой
> предусмотрен) получить subj.
подскажите чайнику, плиз, вот у меня выводится:
DevInfoDetail->DevicePath =
\\?\usbstor#disk&ven_lg&prod_x-tick_2.0&rev_1.00#7&328699db&1#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}

- что это за зверь, что из этого стринга можно понять ?
особенно интересует #7&328699db&1


file-handle - это то, что возвращает такой вот вызов:
HANDLE hUsbDevice = CreateFile ( DevInfoDetail->DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); ?





<beginners>
SetupDiGetClassDevs & SetupDiEnumDeviceInterfaces 10.01.05 14:04  
Автор: eug Статус: Незарегистрированный пользователь
Отредактировано 10.01.05 14:09  Количество правок: 2
<"чистая" ссылка>
есть вопрос по поводу сабжевых функций:
HDEVINFO SetupDiGetClassDevs(
  const GUID* ClassGuid,
  PCTSTR Enumerator,
  HWND hwndParent,
  DWORD Flags
);

---

BOOL SetupDiEnumDeviceInterfaces(
  HDEVINFO DeviceInfoSet,
  PSP_DEVINFO_DATA DeviceInfoData,
  const GUID* InterfaceClassGuid,
  DWORD MemberIndex,
  PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData
);

---

Обе функции используют как входной параметр const GUID* InterfaceClassGuid, мне нужно получить
доступ для чтения к USB drive, в ветке HKLM\System\CurrentControlSet\Enum\USBStror\Нужный_Ключ\Id\ClassGUID
я вижу {4D36E967-E325-11CE-BFC1-08002BE10318}, SetupDiGetClassDevs получая этот GUID, возвращает
S_OK, однако, когда я пытаюсь получить заполненную структуру DeviceInterfaceData при помощи SetupDiEnumDeviceInterfaces вместо неё
я получаю "No more data is avaiable".
Куда копать ? Что нужно использовать как const GUID* InterfaceClassGuid ?
10x
Пример рабочего кода 10.01.05 19:16  
Автор: leo <Леонид Юрьев> Статус: Elderman
Отредактировано 10.01.05 19:24  Количество правок: 1
<"чистая" ссылка>
void TEngineImp::OpenDevice(unsigned Number)
{
    HDEVINFO hardwareDeviceInfo;
    hardwareDeviceInfo = SetupDiGetClassDevsW((LPGUID)&GUID_SLAB_DEVICE_INTERFACE_CLASS, 0, 0, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE);
    if(INVALID_HANDLE_VALUE == hardwareDeviceInfo)
        return;

    SP_INTERFACE_DEVICE_DATA deviceInterfaceData;
    deviceInterfaceData.cbSize = sizeof(SP_INTERFACE_DEVICE_DATA);

    int i = 0;

    do
    {
        if(SetupDiEnumDeviceInterfaces(hardwareDeviceInfo, 0, (LPGUID)&GUID_SLAB_DEVICE_INTERFACE_CLASS, i, &deviceInterfaceData))
        {
            PSP_INTERFACE_DEVICE_DETAIL_DATA deviceInterfaceDetailData;
            ULONG predictedLength = 0;
            ULONG requiredLength = 0, bytes = 0;

            SetupDiGetInterfaceDeviceDetailW(hardwareDeviceInfo, &deviceInterfaceData, 0, 0, &requiredLength, 0);
            predictedLength = requiredLength;

            deviceInterfaceDetailData = (PSP_INTERFACE_DEVICE_DETAIL_DATA) malloc(predictedLength);
            deviceInterfaceDetailData->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA);

            if(!SetupDiGetInterfaceDeviceDetailW(hardwareDeviceInfo, &deviceInterfaceData, deviceInterfaceDetailData, predictedLength, &requiredLength, 0))
            {
                free(deviceInterfaceDetailData);
                SetupDiDestroyDeviceInfoList(hardwareDeviceInfo);
                return;
            }

            if(i == Number)
            {
                m_SlabControl.hHandle = CreateFile(deviceInterfaceDetailData->DevicePath, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING, 0);

                free(deviceInterfaceDetailData);
                SetupDiDestroyDeviceInfoList(hardwareDeviceInfo);
                return;
            }

            free(deviceInterfaceDetailData);
        }
        else
            if(ERROR_NO_MORE_ITEMS == GetLastError())
            {
                SetupDiDestroyDeviceInfoList(hardwareDeviceInfo);
                return;
            }
    }
    while(true);
}

---
помогите "причесать" код, плиз [inside] 16.01.05 15:19  
Автор: eug Статус: Незарегистрированный пользователь
Отредактировано 16.01.05 15:19  Количество правок: 1
<"чистая" ссылка>
при сборке компонента в Release mode, ведёт себя странно:
при загрузке в сплоере работает, но по рефрешу не инициализируется снова, в Debug mode работает нормально.
CKeyVerificationControl()
{
	l_driveSignature = 0;
	s_errorStatus = 0;
	char pattern[] = "\\\\?\\usbstor#disk&ven_lg&prod_x-tick_2.0";
	bool endFlag = false;

	CLSID GUID_CLASS_USB_DRV = CLSID_NULL;
	HRESULT hres = CLSIDFromString(L"{53f56307-b6bf-11d0-94f2-00a0c91efb8b}", &GUID_CLASS_USB_DRV);
	if(S_OK != hres)
	{
		endFlag = true;
		s_errorStatus = 1; // CLSID convertion error
	}
	
	HDEVINFO hDevInfo  = SetupDiGetClassDevs ( (GUID*)& GUID_CLASS_USB_DRV, NULL, NULL, DIGCF_PRESENT | DIGCF_DEVICEINTERFACE);
	if(INVALID_HANDLE_VALUE == hDevInfo)
	{
		endFlag = true;
		s_errorStatus = 2; // no device found [invalid device handler]
	}
	
	PSP_DEVICE_INTERFACE_DATA DevInfoData =
	(PSP_DEVICE_INTERFACE_DATA)malloc(sizeof(SP_DEVICE_INTERFACE_DATA));
	DevInfoData ->cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
	
	short i = 0;
	
	while(!endFlag)
	{
		
		if(SetupDiEnumDeviceInterfaces(hDevInfo, NULL, &GUID_CLASS_USB_DRV, i++,DevInfoData))
		{
			ULONG requiredLength = 0;

			SetupDiGetInterfaceDeviceDetail (hDevInfo, DevInfoData, NULL, 0, &requiredLength, NULL); 
			
			PSP_DEVICE_INTERFACE_DETAIL_DATA DevInfoDetail =
			(PSP_DEVICE_INTERFACE_DETAIL_DATA)malloc(requiredLength);

			DevInfoDetail ->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
			
			SetupDiGetInterfaceDeviceDetail (hDevInfo, DevInfoData, DevInfoDetail, requiredLength, &requiredLength, NULL);
			
			short pos;
			bool continueFlag = false;
			char* niddle = DevInfoDetail->DevicePath;
			for(pos=0;pos<strlen(pattern);pos++)
			{
				if(pattern[pos] != niddle[pos])
				{
					continueFlag = true;
					break;
				}
			}

			if(continueFlag)
			{
				continue;
			}
			
			//printf("%s", DevInfoDetail->DevicePath);
			
			HANDLE hUsbDevice = CreateFile ( DevInfoDetail->DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
			
			DRIVE_LAYOUT_INFORMATION* lpOutBuffer = (DRIVE_LAYOUT_INFORMATION*)malloc(sizeof(DRIVE_LAYOUT_INFORMATION)); // output buffer
			DWORD nOutBufferSize = sizeof(DRIVE_LAYOUT_INFORMATION)*5;         // size of output buffer
			LPDWORD lpBytesReturned = (LPDWORD)malloc(sizeof(DRIVE_LAYOUT_INFORMATION));      // number of bytes returned
			LPOVERLAPPED lpOverlapped = NULL;     // OVERLAPPED structure


			DeviceIoControl(
			hUsbDevice,                // handle to device
			IOCTL_DISK_GET_DRIVE_LAYOUT,   // dwIoControlCode
			NULL,                            // lpInBuffer
			0,
			lpOutBuffer,           // output buffer
			nOutBufferSize,         // size of output buffer
			lpBytesReturned,      // number of bytes returned
			lpOverlapped     // OVERLAPPED structure
			);
			
			l_driveSignature = lpOutBuffer->Signature;

			free(DevInfoDetail);
			//free(lpBytesReturned);  // здесь падает
			//free(lpOutBuffer);          // и здесь :(
			CloseHandle(hUsbDevice);
		}
		else
		{
			if(ERROR_NO_MORE_ITEMS == GetLastError())
			{
					endFlag = true;
			}
		}
	}
	if(!l_driveSignature)
	{
		s_errorStatus = 4; // no key inserted
	}
}

---

10x
а где определён guid_slab_device_interface_cl ? 10.01.05 22:08  
Автор: eug Статус: Незарегистрированный пользователь
Отредактировано 10.01.05 22:08  Количество правок: 1
<"чистая" ссылка>
вообще реально посредство таких манипуляций добраться до серийного номера usb drive'a ?
Re: 11.01.05 00:00  
Автор: leo <Леонид Юрьев> Статус: Elderman
<"чистая" ссылка>
это просто мой GUID, где он определен - не важно. см MSDN и PlatformSDK на предмет "DEFINE_GUID".

> вообще реально посредство таких манипуляций добраться до
> серийного номера usb drive'a ?

вполне реально добраться до file-handle к устройству (экземпляру класса), а потом через IOCTL (если такой предусмотрен) получить subj.
а как узнать GUID конкретного подключенного устройства ? 11.01.05 00:24  
Автор: eug Статус: Незарегистрированный пользователь
Отредактировано 11.01.05 00:27  Количество правок: 1
<"чистая" ссылка>
> это просто мой GUID, где он определен - не важно. см MSDN и
> PlatformSDK на предмет "DEFINE_GUID".

а как узнать GUID конкретного подключенного устройства ?
а то я всё реджистри уже облазил, и нахожу только GUID для классов устройств
[подобные в постах выше]

> вполне реально добраться до file-handle к устройству
> (экземпляру класса), а потом через IOCTL (если такой
> предусмотрен) получить subj.
подскажите чайнику, плиз, вот у меня выводится:
DevInfoDetail->DevicePath =
\\?\usbstor#disk&ven_lg&prod_x-tick_2.0&rev_1.00#7&328699db&1#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}

- что это за зверь, что из этого стринга можно понять ?
особенно интересует #7&328699db&1


file-handle - это то, что возвращает такой вот вызов:
HANDLE hUsbDevice = CreateFile ( DevInfoDetail->DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); ?





А не у всякого устройства есть GUID 11.01.05 12:32  
Автор: amirul <Serge> Статус: The Elderman
<"чистая" ссылка>
Есть GUID интерфейса. А это уже от драйвера зависит, будет ли устройство создавать простой симлинк или интерфейс. А GUID интерфейса для конкретного устройства всегда жестко задан и одинаков на всех машинах. Как пример, ты же не спрашиваешь как в винде называется com-порт, потому как имена одинаковые, с GUID-ом интерфейса то же самое, просто функции другие.

> подскажите чайнику, плиз, вот у меня выводится:
> DevInfoDetail->DevicePath =
> \\?\usbstor#disk&ven_lg∏_x-tick_2.0&rev_1.00#7&328699db
> &1#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}

> - что это за зверь, что из этого стринга можно понять ?
> особенно интересует #7&328699db&1
Понять из этого стринга можно только то, что микрософт не хочет, чтобы ты обращался к нему напрямую, а использовал функции для работы с интерфейсами. Чтобы понять как работать с интерфейсами смотри DDK samle-ы из каталога:
NTDDK\src\general\toaster

В частности создание интерфейса из драйвера: функция Bus_AddDevice в файле bus\pnp.c
Ну и работа с интерфейсами из третьего кольца - подкаталог exe

Успехов

> file-handle - это то, что возвращает такой вот вызов:
> HANDLE hUsbDevice = CreateFile (> DevInfoDetail->DevicePath, GENERIC_READ | GENERIC_WRITE, > FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, > NULL); ?
Да
большое спасибо 11.01.05 12:55  
Автор: eug Статус: Незарегистрированный пользователь
<"чистая" ссылка>
непонятки с ClassGUID 10.01.05 17:31  
Автор: eug Статус: Незарегистрированный пользователь
<"чистая" ссылка>
если вместо {4D36E967-E325-11CE-BFC1-08002BE10318}, использовать {53f56307-b6bf-11d0-94f2-00a0c91efb8b},
то всё становится на свои места.
кто-нибудь может прояснить почему ?
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach