0x0c0de
28.11.2008, 20:42
[Детект Parallels Workstation].
Много написано было про VmWare, а про детект этой вм ничего не видела, а так как юзаю не варю, а ее, то стало интересно. Нашла по крайней мере 2 способа ее сдетектить
ОС: Windows XP (SP2,SP3)
1)Виртуальный cdrom и hdd
В системе, установленной на Parallels
присутствуют символические ссылки с именами
~(у меня)
IDE#CdRomPRL_Virtual_CD-ROM______________________R102____#4&2eac1
2a2&0&0.1.0#{53f56308-b6bf-11d0-94f2-00a0c91efb8b}
IDE#DiskVirtual__HDD_[0]________________________FWR10003#31303134
39353632333538353739333933323438#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}
на реальном компе (также только частный случай)
IDE#CdRomATAPI_DVD_A__DH20A4P____________________9 P54____#5&3b5e6
249&0&0.1.0#{1186654d-47b8-48b9-beb9-7df113ae3c67}
IDE#DiskHitachi_HDS721616PLA380_________________P2 2OABEA#5&1bbc6d
1b&0&0.0.0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}
(см скрины)
http://img530.imageshack.us/my.php?image=parllsuv1.jpg
как видно, юзала Winobj.
понятное дело, что часть CdRomPRL_ и DiskVirtual__HDD_ постоянна на остальное закладываться не стоит (я проверку на эту часть строки делала, но в принципе можно проверять CdRomPRL_Virtual_CD-ROM). Здесь вывод: идем по дереву объектов (используя NtOpenDirectoryObject и NtQueryDirectoryObject) и ищем SymbolicLink. Потом парсим строку и если находим подстроку DiskVirtual__HDD_ или CdRomPRL_, то мы под Paralles.
Результат работы моей проги под эмулятором
детектед
http://img266.imageshack.us/my.php?image=dethd2.jpg
2. Через реестр в VideoBiosVersion права Parallels(R)
Ключ: HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System
Параметр: "VideoBiosVersion"
Значение(у меня):
2Parallels(R) VGA-Compatible BIOS Version 1.05
Id: vgabios.c,v 1.61 2005/05/24 16:50:50 vruppert Exp
Думаю, в следующем коде все понятно
BOOL DetectBios(void){
BOOL rslt = FALSE;
HKEY hkey;
wchar_t lpData[500];
if(!RegOpenKey(HKEY_LOCAL_MACHINE,L"HARDWARE\\Description\\System",&hkey))
{
DWORD Type = REG_MULTI_SZ,lpcbData = 500;
if(!RegQueryValueEx(hkey,L"VideoBiosVersion",0,&Type,(LPBYTE)&lpData,&lpcbData))
{
wprintf(L"Value name = %s\n",lpData);
//ищем подстроку Parallels(R) в строке со значением
if(checkLink(lpData,L"Parallels(R)",12)){
wprintf(L"Registry value detected\n");
}
}
else wprintf(L"Error in RegQueryValueEx\n");
RegCloseKey(hkey);
}
else wprintf(L"Cannot open key\n");
return rslt;
}
program download
http://rapidshare.com/files/168272284/ParallelsDetect.rar.html
Много написано было про VmWare, а про детект этой вм ничего не видела, а так как юзаю не варю, а ее, то стало интересно. Нашла по крайней мере 2 способа ее сдетектить
ОС: Windows XP (SP2,SP3)
1)Виртуальный cdrom и hdd
В системе, установленной на Parallels
присутствуют символические ссылки с именами
~(у меня)
IDE#CdRomPRL_Virtual_CD-ROM______________________R102____#4&2eac1
2a2&0&0.1.0#{53f56308-b6bf-11d0-94f2-00a0c91efb8b}
IDE#DiskVirtual__HDD_[0]________________________FWR10003#31303134
39353632333538353739333933323438#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}
на реальном компе (также только частный случай)
IDE#CdRomATAPI_DVD_A__DH20A4P____________________9 P54____#5&3b5e6
249&0&0.1.0#{1186654d-47b8-48b9-beb9-7df113ae3c67}
IDE#DiskHitachi_HDS721616PLA380_________________P2 2OABEA#5&1bbc6d
1b&0&0.0.0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}
(см скрины)
http://img530.imageshack.us/my.php?image=parllsuv1.jpg
как видно, юзала Winobj.
понятное дело, что часть CdRomPRL_ и DiskVirtual__HDD_ постоянна на остальное закладываться не стоит (я проверку на эту часть строки делала, но в принципе можно проверять CdRomPRL_Virtual_CD-ROM). Здесь вывод: идем по дереву объектов (используя NtOpenDirectoryObject и NtQueryDirectoryObject) и ищем SymbolicLink. Потом парсим строку и если находим подстроку DiskVirtual__HDD_ или CdRomPRL_, то мы под Paralles.
Результат работы моей проги под эмулятором
детектед
http://img266.imageshack.us/my.php?image=dethd2.jpg
2. Через реестр в VideoBiosVersion права Parallels(R)
Ключ: HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System
Параметр: "VideoBiosVersion"
Значение(у меня):
2Parallels(R) VGA-Compatible BIOS Version 1.05
Id: vgabios.c,v 1.61 2005/05/24 16:50:50 vruppert Exp
Думаю, в следующем коде все понятно
BOOL DetectBios(void){
BOOL rslt = FALSE;
HKEY hkey;
wchar_t lpData[500];
if(!RegOpenKey(HKEY_LOCAL_MACHINE,L"HARDWARE\\Description\\System",&hkey))
{
DWORD Type = REG_MULTI_SZ,lpcbData = 500;
if(!RegQueryValueEx(hkey,L"VideoBiosVersion",0,&Type,(LPBYTE)&lpData,&lpcbData))
{
wprintf(L"Value name = %s\n",lpData);
//ищем подстроку Parallels(R) в строке со значением
if(checkLink(lpData,L"Parallels(R)",12)){
wprintf(L"Registry value detected\n");
}
}
else wprintf(L"Error in RegQueryValueEx\n");
RegCloseKey(hkey);
}
else wprintf(L"Cannot open key\n");
return rslt;
}
program download
http://rapidshare.com/files/168272284/ParallelsDetect.rar.html