А>возвращается нормальный хэндл m_driveHandle, но параллельно всему этому создаётся ещё один хэндл!!!
Во-первых, откуда вам это известно? Во-вторых, если уж вам известно что создаётся какой-то хендл, вероятно у вас есть и какая-то информация об этом хендле (тип, имя объекта, ...)?
Re[2]: дублирование хэндлов
От:
Аноним
Дата:
27.01.09 15:23
Оценка:
Здравствуйте, x64, Вы писали:
А>>возвращается нормальный хэндл m_driveHandle, но параллельно всему этому создаётся ещё один хэндл!!!
x64>Во-первых, откуда вам это известно? Во-вторых, если уж вам известно что создаётся какой-то хендл, вероятно у вас есть и какая-то информация об этом хендле (тип, имя объекта, ...)?
Это я вижу в Task Manager, создаётся два хэндла, а закрывается только один...
про известный мне хэндл я знаю его значение, object address, access. Про второй же я не имею информации.
Да, чуть не забыл про очень важную деталь, моя проблема воспроизводится, если в приводе нет диска! Если диск есть, то всё Ок.
А>>>возвращается нормальный хэндл m_driveHandle, но параллельно всему этому создаётся ещё один хэндл!!! x64>>Во-первых, откуда вам это известно? Во-вторых, если уж вам известно что создаётся какой-то хендл, вероятно у вас есть и какая-то информация об этом хендле (тип, имя объекта, ...)?
А>Это я вижу в Task Manager, создаётся два хэндла, а закрывается только один... А>про известный мне хэндл я знаю его значение, object address, access. Про второй же я не имею информации. А>Да, чуть не забыл про очень важную деталь, моя проблема воспроизводится, если в приводе нет диска! Если диск есть, то всё Ок.
Смиритесь с этим. В вашем процессе работает не только ваш код, потому контролировать все ресурсы вы не можете.
Re[4]: дублирование хэндлов
От:
Аноним
Дата:
27.01.09 16:08
Оценка:
Т.е. это исправить никак нельзя?
Re[5]: дублирование хэндлов
От:
Аноним
Дата:
27.01.09 16:16
Оценка:
А>Т.е. это исправить никак нельзя?
Это приводит к каким либо проблемам в работе программы, в том числе если эта операция будет выполнена много раз?
А>Это я вижу в Task Manager, создаётся два хэндла, а закрывается только один... А>про известный мне хэндл я знаю его значение, object address, access. Про второй же я не имею информации.
Значит так, предположений сейчас можно массу сделать, и про файловые фильтры (и не только файловые), и про user-mode перехватчики какие-нибудь. Чтобы не гадать, делаем следующее:
1. Запускаем Process Explorer (скачать можно отсюда).
2. Запускаем нашу программу и производим в ней действия, чтобы получить второй хендл, описанные выше.
3. Выбираем в Process Explorer'е нужный процесс (наш процесс).
4. Меню View -> Show lower pane.
5. Меню View -> Lower pane view -> Handles.
6. В нижней панели копируем информацию обо всех хендлах и пишем сюда в ответ на это сообщение.
7. Меню View -> Lower pane view -> DLLs.
8. В нижней панели копируем информацию обо всех загруженных DLL и пишем сюда в ответ на это сообщение.
Вперёд, тогда можно будет что-нибудь более интересное сказать. Хотя в итоге я согласен с анонимным оратором — любой чужой код (возможно, содержащий ошибки), загруженный в твой процесс, контролировать невозможно и не нужно. Это проблема пользователя, пусть он решает, — стоит ли использовать такой код или нет (хотя, конечно, иногда трудно доказывать, что не верблюд, это да...).
Re[6]: дублирование хэндлов
От:
Аноним
Дата:
27.01.09 16:20
Оценка:
в принципе, мой запрос к приводу производится много раз, и от этого клонирования очень хотелось бы избавиться...
Re[7]: дублирование хэндлов
От:
Аноним
Дата:
27.01.09 16:34
Оценка:
А>в принципе, мой запрос к приводу производится много раз, и от этого клонирования очень хотелось бы избавиться...
И каждый раз отжирается доп хэндл?
Здравствуйте, Аноним, Вы писали:
А>>в принципе, мой запрос к приводу производится много раз, и от этого клонирования очень хотелось бы избавиться... А>И каждый раз отжирается доп хэндл?