singlepost

WinAPI Отключение USB накопителей << На главную или назад  

Привет всем! Пишу прогу для отключения флешек, вот код:

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(&amp;DeviceGuid, 0, 0, DIGCF_PRESENT);
if (hDevInfo &#33;= INVALID_HANDLE_VALUE) {
DeviceInfoData.cbSize = sizeof (SP_DEVINFO_D?4??4??1?);

for (i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &amp;DeviceInfoData); ++i) {
DWORD DataT;
DWORD buffersize = 255;
LPTSTR buffer = (char*) LocalAlloc(LPTR, 255);

if (SetupDiGetDeviceRegistryProperty(hDevInfo, &amp;DeviceInfoData, SPDRP_COMPATIBLEIDS, &amp;DataT, (PBYTE) buffer, buffersize, NULL)) {

if (strcmp(buffer, &quot;USBSTOR&#092;&#092;Disk&quot;) == 0) {
if (&#33;SetupDiSetClassInstallParams(hDevInfo, &amp;DeviceInfoData, (PSP_CLASSINSTALL_HEADER) &amp; pcp, sizeof (SP_PROPCHANGE_PARAMS)))
return;

if (&#33;SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo, &amp;DeviceInfoData))
return;
}
}

if (buffer)LocalFree(buffer);
}//for

SetupDiDestroyDeviceInfoList(hDevInfo);

}//if
}

Из-под пользователя (администратора) работает, но при помещении этого кода в сервис флешка не отключается, только после перезагрузки компа.
Как исправить?

5 ответов в теме “WinAPI Отключение USB накопителей”

  1. 5
    Сергей Полушкин ответил:

    эх если бы я писал под линух, я бы не спрашивал ))) Нынче все прогрессивное человечество использует виндовс, предпочитают анальное рабство!!!

    Придется через реестр отрубать ;(

  2. 4
    Евгений Князев ответил:

    эх…писал бы ты пол линь — я бы тебе с удовольствием помог.Сам не так давно подобное писал.А вот в винде — как свинья в помидорах, увы.

  3. 3
    Сергей Полушкин ответил:

    Неужели ни ктоsetupapi не использовал?
    Как я понял нужно намекнуть системе перезагрузить драйвер флешек, а как не знаю.
    Кстати что с сайтом микрасофта, у меня уже 2-ой день не открывается. хотел ddk качнуть, да msdn почитать

  4. 2
    Александр Фирсов ответил:

    думаю это SP_DEVINFO_D ATA, вконтакт плющит

  5. 1
    Евгений Князев ответил:

    извиняюсь за ламерство, но разве это "SP_DEVINFO_D?4??4??1?" корректно?просто впервые вижу такое имя класса.

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.