Вопрос № 76158: Здравствуйте, уважаемые экспетры.
У меня вопрос следующего содержания: как можно работать с жёстким диском на уровне кластеров, головок, секторов и так далее? В общем, Вы меня понимаете. Есть ли соответствующая API функция(и)? Предложите, по...Вопрос № 76233: Здраствуйте!!! немогу никак найти описание флагов доступа функции OpenProcess. такие флаги
PROCESS_QUERY_INFORMATION,SYNCHRONIZE
какие существует еще флаги, плиз можно сылку! ...Вопрос № 76352: Здраствуйте, у меня два таких вопроса:
1)в функцие _beginthread 3-й параметр( void *arglist), что это за параметр и как он применяеться?
2) ни как не могу разобраться с этим mutex'ом. как передает значение mutex после ReleaseMutex.Если Один о...Вопрос № 76537: Здраствуйте!!! у меня несколько вопросов:
1)спомощью функции GetDriveType я запрашиваю инфо об утройстве. но он выдает одинаковую инфо как на СD привод так и на DVD(я имею виду что эти два привода СD), какие есть еще функции или как спомощью GetD...Вопрос № 76640: Уважаемые експерты:
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersion
ExplorerAdvancedHidden
Какие значения и для чего?
Помогоите с главной задачей: как заставить експлорер реагировать на програмное изменен...
Вопрос № 76.158
Здравствуйте, уважаемые экспетры.
У меня вопрос следующего содержания: как можно работать с жёстким диском на уровне кластеров, головок, секторов и так далее? В общем, Вы меня понимаете. Есть ли соответствующая API функция(и)? Предложите, пожалуйста, все варианты, которые Вам известны. Особо ценю развёрнутые ответы и ссылки на дополнительные материалы.
Заранее спасибо.
С уважением, Demon
Отправлен: 17.02.2007, 16:08
Вопрос задал: Const (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Mitya86
Здравствуйте, Const!
В этой области я далеко не специалист, но думаю что таких функций нет, и работать на таком низком уровне с устройством можно только на ассемблере(может еще и на С).
Ответ отправил: Mitya86 (статус: 3-ий класс)
Ответ отправлен: 18.02.2007, 11:21
Вопрос № 76.233
Здраствуйте!!! немогу никак найти описание флагов доступа функции OpenProcess. такие флаги
PROCESS_QUERY_INFORMATION,SYNCHRONIZE
какие существует еще флаги, плиз можно сылку!
Отправлен: 18.02.2007, 01:45
Вопрос задал: HITY (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Gh0stik
Здравствуйте, HITY!
Вот список флагов, которые Вы можете использовать:
PROCESS_ALL_ACCESS
PROCESS_CREATE_PROCESS
PROCESS_CREATE_THREAD
PROCESS_DUP_HANDLE
PROCESS_QUERY_INFORMATION
PROCESS_QUERY_LIMITED_INFORMATION
PROCESS_SET_QUOTA
PROCESS_SET_INFORMATION
PROCESS_SUSPEND_RESUME
PROCESS_TERMINATE
PROCESS_VM_OPERATION
PROCESS_VM_READ
PROCESS_VM_WRITE
SYNCHRONIZE
Детально прочитать, что каждый из них обозначает можно по ссылке (но на английском...).
Good Luck!!!
--------- Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессионал) Украина, Славянск Организация: Славянский государственный педагогический университет (Кафедра алгебры) ICQ: 289363162 ---- Ответ отправлен: 18.02.2007, 02:08 Оценка за ответ: 5 Комментарий оценки: Спасибо!!! да, надо будет всетаки поискать msdn!!
Отвечает: Егоров Александр
Здравствуйте, HITY!
Нашел описание на английском. Я думаю со словарем разберетесть. Не сложно.
The OpenProcess function returns a handle of an existing process object.
HANDLE OpenProcess(
DWORD dwDesiredAccess, // access flag
BOOL bInheritHandle, // handle inheritance flag
DWORD dwProcessId // process identifier
);
Parameters
dwDesiredAccess
Specifies the access to the process object. For operating systems that support security checking, this access is checked against any security descriptor for the target process. Any combination of the following access flags can be specified in addition to the STANDARD_RIGHTS_REQUIRED access flags:
Access Description
PROCESS_ALL_ACCESS Specifies all possible access flags for the process object.
PROCESS_CREATE_PROCESS Used internally.
PROCESS_CREATE_THREAD Enables using the process handle in the CreateRemoteThread function to create a thread in the process.
PROCESS_DUP_HANDLE Enables using the process handle as either the source or target process in the DuplicateHandle function to duplicate a handle.
PROCESS_QUERY_INFORMATION Enables using the process handle in the GetExitCodeProcess and GetPriorityClass functions to read information from the process object.
PROCESS_SET_INFORMATION Enables using the process handle in the SetPriorityClass function to set the priority class of the process.
PROCESS_TERMINATE Enables using the process handle in the TerminateProcess function to terminate the process.
PROCESS_VM_OPERATION Enables using the process handle in the VirtualProtectEx and WriteProcessMemory functions to modify the virtual memory of the process.
PROCESS_VM_READ Enables using the process handle in the ReadProcessMemory function to read from the virtual memory of the process.
PROCESS_VM_WRITE Enables using the process handle in the WriteProcessMemory function to write to the virtual memory of the process.
SYNCHRONIZE Windows NT only: Enables using the process handle in any of the wait functions to wait for the process to terminate.
bInheritHandle
Specifies whether the returned handle can be inherited by a new process created by the current process. If TRUE, the handle is inheritable.
dwProcessId
Specifies the process identifier of the process to open.
Return Values
If the function succeeds, the return value is an open handle of the specified process.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.
Remarks
The handle returned by the OpenProcess function can be used in any function that requires a handle to a process, such as the wait functions, provided the appropriate access rights were requested.
When you are finished with the handle, be sure to close it using the CloseHandle function.
--------- Чтобы слова не расходились с делом надо молчать и ничего не делать.
Ответ отправил: Егоров Александр (статус: 9-ый класс)
Ответ отправлен: 18.02.2007, 02:12 Оценка за ответ: 5 Комментарий оценки: Незря мне мама говорила учи английский. только я ее зря не слушался)))))))) Спасибо конечно раберусь та еще уроки англиского подучу
Вопрос № 76.352
Здраствуйте, у меня два таких вопроса:
1)в функцие _beginthread 3-й параметр( void *arglist), что это за параметр и как он применяеться?
2) ни как не могу разобраться с этим mutex'ом. как передает значение mutex после ReleaseMutex.Если Один основной потока а два отходяшие от(ожадают mutex WaitForSingleObject(hMutex,INFINITE)) него после ReleaseMutex оба процесса стартуют или как?? а если по очереди мне надо запускать нужно два mutex'a??? и почему основной поток не запускаеться в нем же есть WaitForSingleObject(hMutex,INFINITE)
в приложении один поток, интерисует если два потока:
Приложение:
Отправлен: 18.02.2007, 23:29
Вопрос задал: HITY (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Григорьеа Владимир Дмитриевич
Здравствуйте, HITY!
Относительно первой части вопроса. Если я не ошибаюсь, через параметр (void *arglist) передается номер потока.
Ответ отправил: Григорьеа Владимир Дмитриевич (статус: 1-ый класс)
Ответ отправлен: 19.02.2007, 04:42 Оценка за ответ: 4 Комментарий оценки: а если ошибаетесь???? мне кажеться arglist это параметры потока pParams в void Thread(void *pParams),а может и номер потока
Отвечает: Tek
Здравствуйте, HITY!
1. Прототип потоковой функции имеет вид:
void ThreadF( void * ).
Вот в этом аргументе _beginthread как раз и передается параметр для этой функции. Это сделано для того чтобы вы могли не используя глобальные переменные передать какие-либо данные в потоковую процедуру, например инициирующие значения или ссылку на экземпляр класса, обслуживающего поток.
2. Мьютекс - это просто сигнальный объект ядра (грубо говоря переменная-флаг, только хранящаяся и обслуживаемая в ядре ОС). По-этому Вы создаете его CreateMutex, а потом его желательно удалить CloseHandle, как и любой другой объет под дескриптором. Впрочем в вашем случае это не обязательно, так как программа все равно не завершиться :). А если и выйдет из цикла(когда вы это предусмотрите - то система сама закроет используемые ее дескрипторы по окончании), но все-таки хороший стиль - есть хороший стиль. А ReleaseMutex
просто сообщает системе что мьютекс нужно перевести в сигнальное состояние, и после этого его могут захватить другие потоки.
Кроме того судя по коду у вас создается кроме основного - только один поток (_beginthread с потоковой процедурой void Thread(void *pParams))
И эта программа работает следующим образом. После создания потока вероятнее всего основной поток захватит мьютекс - распеяатает мусор (так как массив a - еще не инициирован, хотя некоторые компиляторы имеют привычку инициировать статические и глобальные переменные). Затем основной поток "отпускает" мьютекс и его скорее всего захватит уже дочерний поток - и запишет в элементы массива нули. Затем эта ситуация может чередоваться. Так как потоки имеют равный приоритет - то они будут захватывать мьютекс
по очереди и выполнять свои операции. Поскольку циклы не имеют условий выхода - ваша программа постоянно будет выводить числа на экран.
ЗЫ: Очень, очень, очень, очень, очень, очень плохо использовать _beginthread и _endthread. Используйте их расширенные версии <...>ex. И кстати вы даже не ставите _endthread в конце - а надо.
--------- WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано (C)Почти Уинстон Черчилль :)
Ответ отправил: Tek (статус: 10-ый класс)
Ответ отправлен: 19.02.2007, 09:47 Оценка за ответ: 5 Комментарий оценки: Спасибо, дохочево обьяснили, а не использовал _beginthreadex потому что задание такое было!!! а зачем ставить _endthread если цикл все равно не заканчиваеться???
Вопрос № 76.537
Здраствуйте!!! у меня несколько вопросов:
1)спомощью функции GetDriveType я запрашиваю инфо об утройстве. но он выдает одинаковую инфо как на СD привод так и на DVD(я имею виду что эти два привода СD), какие есть еще функции или как спомощью GetDriveType определить где CD где DVD, тоже самое Flash и дисковод!
2)дайте полное описани этих функций GetVolumeInformation,GetDiskFreeSpace возрашаемое значение и их параметры
3)опишите структуру WIN32_FIND_DATA особенно поля описания время(создание,изменение) как их выводить, пример на с++ если можно
4)ну и еще один эти две функции GetSystemDirectory, GetWindowsDirectory возрашают UINT какие именно они значение возращают!!
Отправлен: 20.02.2007, 01:28
Вопрос задал: HITY (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Tek
Здравствуйте, HITY!
Там все
http://msdn2.microsoft.com/ru-ru/default.aspx
А еще надежнее - оффлайн MSDN - с Visual Studio идет.
А еще вроде как владельцам студии - подписка на MSDN предоставляется бесплатно.
Если к нету доступ ограничен или денег жалко - возьмите у кого-нить - он и без самой студии прекрасно идет
Поиск - еще никому не помешал.
--------- WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано (C)Почти Уинстон Черчилль :)
Ответ отправил: Tek (статус: 10-ый класс)
Ответ отправлен: 20.02.2007, 09:22 Оценка за ответ: 5 Комментарий оценки: А у кого взять!! в городе так просто не найдеш, а если найдеш такую цену запулять что дешевле скачать с нета!! Значит будем разрывать ночь в нете )))))!! Спасибо!!!
Отвечает: Sergey A. Wedensky
Здравствуйте, HITY!
1. GetDriveType Вам так подробно не скажет. Советую посмотреть в сторону WMI (класс Win32_CDROMDrive в Вашем случае, а вообще там много чего интересного можно узнать).
2,3,4. Полностью согласен с экспертом Tek - "подробные описания" читаются в MSDN. Оттуда и привожу цитаты на случай,если под рукой нет (переводить лень, надеюсь, с английским знакомы). Времена создания, изменения и пр. файла хранятся в структурах FILETIME. Эта структура является 64-битным значением, представляющим количество 100-наносекундных интервалов с 1 января 1601 г. Если лень переводить, можно, например, преобразовать FILETIME в SYSTEMTIME (функция FileTimeToSystemTime). У этой структуры уже
есть поля wYear (год), wMonth (месяц) и т.д.
Приложение:
Ответ отправил: Sergey A. Wedensky (статус: 10-ый класс)
Ответ отправлен: 20.02.2007, 09:38 Оценка за ответ: 5 Комментарий оценки: с английским знаком не очень. но раз надо, переведу что ж делать,что не смогу я сможет Promt(почти сможет) !!! ну что ж спасибо и за это будем разбираться!!!!
Помогоите с главной задачей: как заставить експлорер реагировать на програмное изменение параметра также как после изменения его в експлорере, мышью. Что делает експлорер после записи ключа в реестр?
Експлорер не реагирует без перезагрузки компютера на значения реестра. А сам изменить видимосиь скрытых файлов может на ура.
Отвечает: estiGi
Здравствуйте, Кудинов Антон Павлович!
Экплорер - это программа, параметр hidden - одна из его настроек, которую он хранит в реестре. Естесственно, когда вы с помощью эксплорера меняете его же настройку, он об этом знает, и сохраняет значение в реестр.
Когда же любым другим способом меняете в реестре эту настройку, экплорер об этом ничего не знает, ибо он не мониторит постоянно эту часть реесра (нафик ему это нужно в данном случае?).
Чтобы дать ему понять, что настройка изменена. нужно заставить экплорер прочесть эту опцию. А как заставить... ну, например, перегрузить его :)
Перегружая машину, вы перегружаете и экплорер. Но можно и просто перегрузить процесс экплорера. Но некоторые другие программы могут после этого себя неокрректно вести (по крайней мере - визуально), если они не следят за состоянием экплорера.
Ответ отправил: estiGi (статус: Студент)
Ответ отправлен: 20.02.2007, 20:42 Оценка за ответ: 3 Комментарий оценки: Это понятно.
Сам он себя может заставить, значит есть шанс.
И к тому же опыт показывает что перезагрузить експлорер в даном случае значит убить процес, пскольку он не завершается при выходе из експлорера(, и остается где в таскмене по-моему так), а это значит что при старте снова !!! он не перечитывает реестр.
Спасибо.
Отвечает: Ross
Здравствуйте, Кудинов Антон Павлович
Просто убейте в task managere процесс explorer.exe. После этого он снова запустится и все будет как надо.
Свои настройки программы хранят в виде переменных в оперативной памяти. Допустим, переменная ответственная за показ скрытых файлов называется ShowHiddenFiles и ее значение false (ложь). Когда в программе вы поменяете эту настройку, explorer занесет в переменную значение true (истина) и сделает соответствующую запись в реестре, чтобы при последующем запуске загрузить оттуда эту настройку.
Если вы сами сделаете запись в реестре, то эксплореру будет это до фонаря до тех пор, пока он не загрузится снова, что можно сделать либо перезагрузив компьютер, либо перезагрузив сам процесс.
Второй способ заставить его поменять значение переменной - изменить значение вручную, но такой вариант отпадает, т.к. вы не знаете адрес переменной в памяти.
Ответ отправил: Ross (статус: 5-ый класс)
Ответ отправлен: 20.02.2007, 21:54 Оценка за ответ: 4