[ C / C++ ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    дык я и не советую юзать мфц в жизни =) просто для понимания, что оно такое, стоит попробовать. но для повседневного юзанья да - он умер и причем давно. любой аналог будет удобнее и более гибким.
     
  2. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Как по пути к дисковому устройству ,например - "\Device\CdRom0", определить имя диска этого устройства?
     
  3. _antony

    _antony Elder - Старейшина

    Joined:
    16 Jul 2008
    Messages:
    80
    Likes Received:
    43
    Reputations:
    0
    если в ринг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

    И если поможет я тут выкладывал в теме свою утилиту для просмотра символьных ссылок.

    [​IMG]

    Надеюсь помог , удачи!
     
    #3223 _antony, 29 Jun 2009
    Last edited: 29 Jun 2009
  4. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Я несовсем понял что это за католог такой \?? Чем его открывать?
     
    #3224 _nic, 29 Jun 2009
    Last edited: 29 Jun 2009
  5. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    А вообще можно методом тыка перебрать все диски и у знать их девайсы. Для этого есть апишка специальная
    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);
    }
    
     
  6. _antony

    _antony Elder - Старейшина

    Joined:
    16 Jul 2008
    Messages:
    80
    Likes Received:
    43
    Reputations:
    0
    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 , Диспетчер Обьектов.
     
  7. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    мой код можно замодить вот до такого состояния:
    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 если не найдено
     
    1 person likes this.
  8. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    Можешь более конкретизировать вопрос?
    Используй стандартные средства работы с файлами.
     
  9. XikarO

    XikarO Member

    Joined:
    20 May 2009
    Messages:
    16
    Likes Received:
    24
    Reputations:
    18
    Недавно стал возится с С++ и у меня возник вопрос по поводу конструкторов и деструкторов. Объясните пожалуйста поподробнее кому не лень каково их назначение и роль в программе)
     
  10. --StraNger--

    --StraNger-- Member

    Joined:
    4 Jan 2009
    Messages:
    63
    Likes Received:
    57
    Reputations:
    5
    конструктор запускается для каждого созданого объекта
    он упрощает иницилизацию элементов класса

    а деконструктор запускается когда объект уничтожается
    смотри тут подробнее. тема элементарная
    http://www.programmersclub.ru/23/
     
  11. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    Ну это же элементарщина, в любом учебнике по с++ все написано, уже даже прочитать лень?
     
  12. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    Я бы не назвал ее элементарной, есть довольно много тонкостей.
     
  13. _antony

    _antony Elder - Старейшина

    Joined:
    16 Jul 2008
    Messages:
    80
    Likes Received:
    43
    Reputations:
    0
    Почитайте Подбельского называется вроде "Язык С++".
     
  14. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    Не читайте Подбельского - очень скучно и занудно.
    Ту же информацию можно почерпнуть из других книг, гораздо более удобных для новичка.
     
  15. _antony

    _antony Elder - Старейшина

    Joined:
    16 Jul 2008
    Messages:
    80
    Likes Received:
    43
    Reputations:
    0
    многие студенты его хвалят , как хорошего преподавателя , так что можно книгу прочитать=)
     
  16. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    У меня есть его издание. Зеленое которое. Финансы и статистика. Для новичка имхо не очень подходит :) Написано очень скупо, единственное форматирование, применяющееся в книге, это жирный текст, текст, текст, текст, текст )
    Выглядит как раз тем учебником по программированию, взглянув на который добрая половина населения скажет "омг, эти странные рунические письмена не для меня"
     
    #3236 Fata1ex, 30 Jun 2009
    Last edited: 30 Jun 2009
  17. XikarO

    XikarO Member

    Joined:
    20 May 2009
    Messages:
    16
    Likes Received:
    24
    Reputations:
    18
    а как насчёт С++ за 21 день там вроде всё понятно, но етот вопрос объясняется немного абстрактно((

    --StraNger-- Спасибо за ссылку!! Как раз то что нужно ))
     
    #3237 XikarO, 30 Jun 2009
    Last edited: 30 Jun 2009
  18. Fata1ex

    Fata1ex Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    703
    Likes Received:
    300
    Reputations:
    38
    XikarO, по-моему там все вполне четко объяснено. Конструкторы по умолчанию, конструкторы копирования все есть. Может ты просто поленился? )
     
  19. XikarO

    XikarO Member

    Joined:
    20 May 2009
    Messages:
    16
    Likes Received:
    24
    Reputations:
    18
    Да нет скорее немного торможу))
     
  20. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    подбельского не читайте. его атипичное именование переменных встроенных типов объектами - это ппц. нельзя такое новичкам давать. портит моск. читайте дейтела.

    по поводу конструкторов - есть такой паттерн как RAII. он напрямую связан с конструкторами и деструкторами. не все так просто, как кажется на первый взгляд.
     
Thread Status:
Not open for further replies.