ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

28.06.2009, 00:11
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
Qt4 для новичка будет сложновато. Хотя и лучше чем mfc. но советую все таки начать с мфц.
|
|
|

28.06.2009, 01:27
|
|
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме: 2868783
Репутация:
414
|
|
Qt4 для новичка будет сложновато. Хотя и лучше чем mfc. но советую все таки начать с мфц.
Ну мой совет будет с точностью наоборот )
mfc очень неудобен в плане написание приложений да и вообще он уже умер (с) =) уж лучше юзать wtl. После перехода с mfc на Qt, сразу видно его преимущества в простоте иерархии всех его классов и взаимодействия обьектов. Ну это все имхо и доказывать тру mfc кодерам не буду ))
Вообще следует попробывать и одно и другое и сделать для себя выводы )
|
|
|

28.06.2009, 01:36
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
дык я и не советую юзать мфц в жизни =) просто для понимания, что оно такое, стоит попробовать. но для повседневного юзанья да - он умер и причем давно. любой аналог будет удобнее и более гибким.
|
|
|

29.06.2009, 09:03
|
|
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме: 2982851
Репутация:
107
|
|
Как по пути к дисковому устройству ,например - "\Device\CdRom0", определить имя диска этого устройства?
|
|
|

29.06.2009, 11:44
|
|
Познающий
Регистрация: 16.07.2008
Сообщений: 82
Провел на форуме: 424387
Репутация:
142
|
|
Сообщение от _nic
Как по пути к дисковому устройству ,например - "\Device\CdRom0", определить имя диска этого устройства?
если в ринг0 то при помощи IoVolumeDeviceToDosName().
Код:
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
И если поможет я тут выкладывал в теме свою утилиту для просмотра символьных ссылок.
Надеюсь помог , удачи!
Последний раз редактировалось _antony; 29.06.2009 в 11:47..
|
|
|

29.06.2009, 12:10
|
|
Постоянный
Регистрация: 05.05.2006
Сообщений: 743
Провел на форуме: 2982851
Репутация:
107
|
|
Я несовсем понял что это за католог такой \?? Чем его открывать?
Последний раз редактировалось _nic; 29.06.2009 в 12:14..
|
|
|

29.06.2009, 12:47
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
А вообще можно методом тыка перебрать все диски и у знать их девайсы. Для этого есть апишка специальная
Код:
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);
}
|
|
|

29.06.2009, 12:48
|
|
Познающий
Регистрация: 16.07.2008
Сообщений: 82
Провел на форуме: 424387
Репутация:
142
|
|
Сообщение от _nic
Я несовсем понял что это за католог такой \?? Чем его открывать?
Код:
#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 , Диспетчер Обьектов.
|
|
|

29.06.2009, 13:05
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
мой код можно замодить вот до такого состояния:
Код:
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 если не найдено
|
|
|

30.06.2009, 01:43
|
|
Постоянный
Регистрация: 24.03.2009
Сообщений: 670
Провел на форуме: 2868783
Репутация:
414
|
|
Через чего удобнее и правильнее работать с файлами ?
Нашёл много способов интересует какие лучше использовать...
Можешь более конкретизировать вопрос?
Используй стандартные средства работы с файлами.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|