дык я и не советую юзать мфц в жизни =) просто для понимания, что оно такое, стоит попробовать. но для повседневного юзанья да - он умер и причем давно. любой аналог будет удобнее и более гибким.
Как по пути к дисковому устройству ,например - "\Device\CdRom0", определить имя диска этого устройства?
если в ринг0 то при помощи IoVolumeDeviceToDosName(). Code: NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject , IN PUNICODE_STRING RegistryPath ) { NTSTATUS ns; PFILE_OBJECT pFileObject; PDEVICE_OBJECT pDev; UNICODE_STRING usDiskName; UNICODE_STRING usLinkName; RtlInitUnicodeString( &usDiskName , L"\\Device\\CdRom0" ); ns = IoGetDeviceObjectPointer( &usDiskName , FILE_ALL_ACCESS , &pFileObject , &pDev ); if( !NT_SUCCESS(ns) ) { KdPrint(("IoGetDeviceObjectPointer failed with status : %08X\n" , ns )); goto _end; } ns = IoVolumeDeviceToDosName( pDev , &usLinkName ); if( !NT_SUCCESS(ns) ) { KdPrint(("IoVolumeDeviceToDosName failed with status : %08X\n" , ns )); goto _end; } KdPrint(("Symbolick link is :%ws \n" , usLinkName.Buffer )); _end: return ns; } если в юзермоде то. имя диска G - это символьная ссылка на объект устройства \Device\CdRom0 например. Все символьные ссылки расположены в каталоге \??. Следовательно можно пройтись по каталогу ( NtOpenDirectoryObject , NtQueryDirectoryObject ) и получить всю необходимую информацию о символьной ссылке ( NtOpenSymbolicLinkObject , NtQuerySymbolicLinkObject ). NtOpenSymbolicLinkObject - http://msdn.microsoft.com/en-us/library/bb470236(VS.85).aspx NtQuerySymbolicLinkObject - http://msdn.microsoft.com/en-us/library/bb470241(VS.85).aspx И если поможет я тут выкладывал в теме свою утилиту для просмотра символьных ссылок. Надеюсь помог , удачи!
А вообще можно методом тыка перебрать все диски и у знать их девайсы. Для этого есть апишка специальная Code: char data[256]; char disk[]="A:"; for (int i='A'; i<='Z'; i++) { disk[0] = i; QueryDosDeviceA(disk, data, 256); printf("%c: - %s\n", i, data); }
Code: #include<stdio.h> #include<windows.h> #include"ntdll.h" #pragma comment ( lib , "ntdll.lib" ) int main( int argc , char*argv[] ) { NTSTATUS ns; HANDLE hDirectory; UNICODE_STRING usDirectoryName; OBJECT_ATTRIBUTES oa; RtlInitUnicodeString( &usDirectoryName , L"\\GLOBAL??" ); // windows 2000 - \?? InitializeObjectAttributes( &oa , &usDirectoryName , OBJ_CASE_INSENSITIVE , NULL , NULL ); ns = NtOpenDirectoryObject( &hDirectory , DIRECTORY_QUERY | DIRECTORY_TRAVERSE , &oa ); if( !NT_SUCCESS(ns) ) { printf("NtOpenDirectoryObject failed with status : %08X\n" , ns ); return -1; } CloseHandle( hDirectory ); return 0; } А вообще если , что-то тут не понятно лучше обратитесь к Руссиновичу глава 3 , Диспетчер Обьектов.
мой код можно замодить вот до такого состояния: Code: UCHAR GetDiskByDevice(char * device) { char data[256]; char disk[]="A:"; for (int i='A'; i<='Z'; i++) { disk[0] = i; QueryDosDeviceA(disk, data, 256); if (!strcmp(data,device)) return i; } return 0; } int main(int argc, char* argv[]) { UCHAR disk; disk = GetDiskByDevice("\\Device\\CdRom1"); printf("%c\n",disk); return 0; } Даешь имя устройства, а получаешь букву диска. Или 0 если не найдено
Недавно стал возится с С++ и у меня возник вопрос по поводу конструкторов и деструкторов. Объясните пожалуйста поподробнее кому не лень каково их назначение и роль в программе)
конструктор запускается для каждого созданого объекта он упрощает иницилизацию элементов класса а деконструктор запускается когда объект уничтожается смотри тут подробнее. тема элементарная http://www.programmersclub.ru/23/
Не читайте Подбельского - очень скучно и занудно. Ту же информацию можно почерпнуть из других книг, гораздо более удобных для новичка.
У меня есть его издание. Зеленое которое. Финансы и статистика. Для новичка имхо не очень подходит Написано очень скупо, единственное форматирование, применяющееся в книге, это жирный текст, текст, текст, текст, текст ) Выглядит как раз тем учебником по программированию, взглянув на который добрая половина населения скажет "омг, эти странные рунические письмена не для меня"
а как насчёт С++ за 21 день там вроде всё понятно, но етот вопрос объясняется немного абстрактно(( --StraNger-- Спасибо за ссылку!! Как раз то что нужно ))
XikarO, по-моему там все вполне четко объяснено. Конструкторы по умолчанию, конструкторы копирования все есть. Может ты просто поленился? )
подбельского не читайте. его атипичное именование переменных встроенных типов объектами - это ппц. нельзя такое новичкам давать. портит моск. читайте дейтела. по поводу конструкторов - есть такой паттерн как RAII. он напрямую связан с конструкторами и деструкторами. не все так просто, как кажется на первый взгляд.