Привет всем! Пишу прогу для отключения флешек, вот код:
BOOL USBDisable() {
int i;
GUID DeviceGuid = {0x4D36E967, 0xE325, 0x11CE,
{0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18}};
SP_PROPCHANGE_PARAMS pcp;
SP_DEVINFO_D?4??4??1? DeviceInfoData;
HDEVINFO hDevInfo;
pcp.ClassInstallHeader.cbSize = sizeof (SP_CLASSINSTALL_HEADER);
pcp.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
pcp.Scope = DICS_FLAG_GLOBAL;
pcp.HwProfile = 0;
pcp.StateChange = DICS_DISABLE;
hDevInfo = SetupDiGetClassDevs(&DeviceGuid, 0, 0, DIGCF_PRESENT);
if (hDevInfo != INVALID_HANDLE_VALUE) {
DeviceInfoData.cbSize = sizeof (SP_DEVINFO_D?4??4??1?);
for (i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); ++i) {
DWORD DataT;
DWORD buffersize = 255;
LPTSTR buffer = (char*) LocalAlloc(LPTR, 255);
if (SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_COMPATIBLEIDS, &DataT, (PBYTE) buffer, buffersize, NULL)) {
if (strcmp(buffer, "USBSTOR\\Disk") == 0) {
if (!SetupDiSetClassInstallParams(hDevInfo, &DeviceInfoData, (PSP_CLASSINSTALL_HEADER) & pcp, sizeof (SP_PROPCHANGE_PARAMS)))
return;
if (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo, &DeviceInfoData))
return;
}
}
if (buffer)LocalFree(buffer);
}//for
SetupDiDestroyDeviceInfoList(hDevInfo);
}//if
}
int i;
GUID DeviceGuid = {0x4D36E967, 0xE325, 0x11CE,
{0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18}};
SP_PROPCHANGE_PARAMS pcp;
SP_DEVINFO_D?4??4??1? DeviceInfoData;
HDEVINFO hDevInfo;
pcp.ClassInstallHeader.cbSize = sizeof (SP_CLASSINSTALL_HEADER);
pcp.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
pcp.Scope = DICS_FLAG_GLOBAL;
pcp.HwProfile = 0;
pcp.StateChange = DICS_DISABLE;
hDevInfo = SetupDiGetClassDevs(&DeviceGuid, 0, 0, DIGCF_PRESENT);
if (hDevInfo != INVALID_HANDLE_VALUE) {
DeviceInfoData.cbSize = sizeof (SP_DEVINFO_D?4??4??1?);
for (i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); ++i) {
DWORD DataT;
DWORD buffersize = 255;
LPTSTR buffer = (char*) LocalAlloc(LPTR, 255);
if (SetupDiGetDeviceRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_COMPATIBLEIDS, &DataT, (PBYTE) buffer, buffersize, NULL)) {
if (strcmp(buffer, "USBSTOR\\Disk") == 0) {
if (!SetupDiSetClassInstallParams(hDevInfo, &DeviceInfoData, (PSP_CLASSINSTALL_HEADER) & pcp, sizeof (SP_PROPCHANGE_PARAMS)))
return;
if (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo, &DeviceInfoData))
return;
}
}
if (buffer)LocalFree(buffer);
}//for
SetupDiDestroyDeviceInfoList(hDevInfo);
}//if
}
Из-под пользователя (администратора) работает, но при помещении этого кода в сервис флешка не отключается, только после перезагрузки компа.
Как исправить?
31 марта 2010 в 11:03
эх если бы я писал под линух, я бы не спрашивал ))) Нынче все прогрессивное человечество использует виндовс, предпочитают анальное рабство!!!
Придется через реестр отрубать ;(
31 марта 2010 в 8:02
эх…писал бы ты пол линь — я бы тебе с удовольствием помог.Сам не так давно подобное писал.А вот в винде — как свинья в помидорах, увы.
31 марта 2010 в 0:01
Неужели ни ктоsetupapi не использовал?
Как я понял нужно намекнуть системе перезагрузить драйвер флешек, а как не знаю.
Кстати что с сайтом микрасофта, у меня уже 2-ой день не открывается. хотел ddk качнуть, да msdn почитать
30 марта 2010 в 23:01
думаю это SP_DEVINFO_D ATA, вконтакт плющит
30 марта 2010 в 22:05
извиняюсь за ламерство, но разве это "SP_DEVINFO_D?4??4??1?" корректно?просто впервые вижу такое имя класса.