Nouzui есть много путей: а) через реестр (но это не универсально, на NT 4.x, W2K и Висте он разный, XP не смотрел); б) писать свой драйвер: http://www.osronline.com/article.cfm?id=79
Stariy пропишись в автозагрузку гденить в реестре, например, в Run. при завершении подлключать смысла нету, после ребута вроде все снова будет как обычно
Возможно, я ошибаюсь, но перезарузка не помогает. По крайней мере, когда я удалил одну букву, то пришлось повозиться, чтоб вернуть ее назад. Хорошо еще, что экспериментировал не с диском С Хотя может быть С и не удалилось бы...
я не помню точно) может и не помогает... все вернуть обратно просто, надо найти том без точки монтирования через FindFirstVolume/FindNextVolume и потом примонтировать его обратно
эта мысль мне в голову пришла несколько позже а поначалу колупался в реестре. кстати. а вот еще вопрос - может ли быть более 26-и дисков в системе? и как они тогда будут обозначаться?
более 26 точек монтирования может (если есть NTFS диски), а более 26 дисков - хз. наверное, нет.. точно не знаю по этому поводу=\
> кстати. а вот еще вопрос - может ли быть более 26-и дисков в системе? > и как они тогда будут обозначаться? NT позволяет давать дискам имена, так что более 26 дисков быть вполне может. у меня иногда присуствует до 30 дисков, пускай и виртуальных, но все работает
Сваял на досуге две проги, одну для скрывания дисков: Код (Text): char disk[7]; int err; BOOL bFlag; char Buf[MAX_PATH]; FILE *ff; ff = fopen("DriveHider.ini","w+"); strcpy(disk,"a:\\"); bFlag = GetVolumeNameForVolumeMountPointA(disk,Buf,MAX_PATH); if (bFlag != TRUE) { MessageBoxA(0,"GetVolumeNameForVolumeMountPoint error",0,0); return 0; } fprintf(ff, "%s %s\n",disk, Buf ); DeleteVolumeMountPointA(disk); strcpy(disk,"s:\\"); bFlag = GetVolumeNameForVolumeMountPointA(disk,Buf,MAX_PATH); if (bFlag != TRUE) { MessageBoxA(0,"GetVolumeNameForVolumeMountPoint error",0,0); return 0; } fprintf(ff, "%s %s\n",disk, Buf ); DeleteVolumeMountPointA(disk); fclose(ff); exit(0); Другую для открывания назад: Код (Text): char disk[7]; int err; BOOL bFlag; char Buf[MAX_PATH]; // temporary buffer for volume name FILE *ff; ff = fopen("DriveHider.ini","r"); fscanf(ff,"%s %s",disk, Buf); bFlag = SetVolumeMountPointA( disk, // mount point Buf // volume to be mounted ); if (!bFlag) { MessageBoxA(0,"SetVolumeMountPoint",0,0); err = GetLastError(); } ////////////////////////////////////// fscanf(ff,"%s %s",disk, Buf); bFlag = SetVolumeMountPointA( disk, // mount point Buf // volume to be mounted ); if (!bFlag) { MessageBoxA(0,"SetVolumeMountPoint",0,0); err = GetLastError(); } fclose(ff); Одну поставил на автозаупск жене, вторую себе. Все вроде работает как надо, так что тему можно считать закрытой. Спасибо всем откликнувшимся за советы.
С одной проблемой разобрались =) Подождите тему клосить, интересно же про >26 дисков то ) так и не было четкого ответа на то, что будет, когда закончатся буквы=\
попробую сегодня занять каким-нить эмулятором CD максимальное кол-во букв, а потом вставить флешку и посмотреть,какая буква ей назначится и че вообще будет
Код (Text): <? mkdir("E:\\substs"); $k=0; for($i='a';$k<26;$k++,$i++) { echo $i.":....\n"; // mkdir("E:\\substs\\".$i); system("subst ".$i.": E:\\substs\\".$i); // system("subst ".$i.": /d"); } ?> потом вставил флешку... были глюки забавные) флешке назначился диск K:, как он назначался ей всегда ранее, и оно показало, что у меня флешка на 39 гигов D только после того, как сделал subst k: /d, флешка нормально заработала
Насоздавал алкоголем кучу виртуальных дисков, чтоб все буквы были заняты. Вставил флэшку - она определилась, но буква ей не назначилась.