Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
QueryFullProcessImageName: Access is denied.
|
|||
|---|---|---|---|
|
#18+
Всех приветствую! Друзья, пытаюсь выполнить функцию QueryFullProcessImageName, однако получаю ошибку: GetLastError() ERROR_ACCESS_DENIED 5 (0x5) Access is denied. Код очень простой: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. Но при выполнении получаю access denied . Подскажите, пожалуйста, в чем может быть проблема? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 20:20 |
|
||
|
QueryFullProcessImageName: Access is denied.
|
|||
|---|---|---|---|
|
#18+
ProcessImageв чем может быть проблема? В том, что ты запрашиваешь право на PROCESS_VM_READ, а QueryFullProcessImageName требует PROCESS_QUERY_INFORMATION или PROCESS_QUERY_LIMITED_INFORMATION, о чём чёрным по белому написано в её описании. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 20:27 |
|
||
|
QueryFullProcessImageName: Access is denied.
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov , благодарю, поправил. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. Теперь получаю: GetLastError() ERROR_NOT_ENOUGH_MEMORY 8 (0x8) Not enough storage is available to process this command. Не пойму в чем дело на этот раз... LPTSTR мало?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 21:02 |
|
||
|
QueryFullProcessImageName: Access is denied.
|
|||
|---|---|---|---|
|
#18+
ProcessImageНе пойму в чем дело на этот раз... LPTSTR мало?!Мало. Прочитай учебник K&R, пятую главу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 21:10 |
|
||
|
QueryFullProcessImageName: Access is denied.
|
|||
|---|---|---|---|
|
#18+
ProcessImageНе пойму в чем дело на этот раз... http://msdn.microsoft.com/en-us/library/windows/desktop/ms684919(v=vs.85).aspx Прочитай хотя бы комментарии. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 21:11 |
|
||
|
QueryFullProcessImageName: Access is denied.
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov , Dimitry SibiryakovПрочитай хотя бы комментарии. Прочитал. На что был намек? На это? Коммент#1The QueryFullProcessImageName doesn't work on win2008-serv64 when the process path contains spaces. На это? Коммент#2For the best results use the following table to convert paths. Windows 2000 = GetModuleFileName() Windows XP x32 = GetProcessImageFileName() Windows XP x64 = GetProcessImageFileName() Windows Vista = QueryFullProcessImageName() Windows 7 = QueryFullProcessImageName() На это? RemarksTo compile an application that uses this function, define _WIN32_WINNT as 0x0600 or later. У меня Windows 7 x64. Код: plaintext 1. - также ошибка №8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 21:25 |
|
||
|
QueryFullProcessImageName: Access is denied.
|
|||
|---|---|---|---|
|
#18+
ProcessImageНа что был намек? На это? И на это, и на то, а главное - на lpdwSize [in, out] On input, specifies the size of the lpExeName buffer, in characters. On success, receives the number of characters written to the buffer, not including the null-terminating character. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 21:34 |
|
||
|
QueryFullProcessImageName: Access is denied.
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov , так и замечательно :) У меня в параметрах адрес переменной типа DWORD (unsigned long) - туда может не влезть значение, описывающее количество знаков, которые записываются в буффер lpExeName? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 21:52 |
|
||
|
QueryFullProcessImageName: Access is denied.
|
|||
|---|---|---|---|
|
#18+
Ах, елки-ж-палки... Дошло наконец-то, где я ступил :-) Благодарю за помощь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 22:01 |
|
||
|
QueryFullProcessImageName: Access is denied.
|
|||
|---|---|---|---|
|
#18+
Ты выделенное предложение прочитать в состоянии? ProcessImageУ меня в параметрах адрес переменной типа DWORD (unsigned long) Какое значение имеет эта переменная на входе в функцию? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 22:01 |
|
||
|
QueryFullProcessImageName: Access is denied.
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov , все же ключевой момент был не в этом, а в выделении памяти: Код: plaintext 1. , на что мне выше намекали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2014, 22:39 |
|
||
|
QueryFullProcessImageName: Access is denied.
|
|||
|---|---|---|---|
|
#18+
ProcessImage Dimitry Sibiryakov , все же ключевой момент был не в этом, а в выделении памяти: Код: plaintext 1. , на что мне выше намекали.Начал в правильном направлении, но не дошел... Ты уверен что полное имя твоего процесса уместится в одну букву? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 00:50 |
|
||
|
QueryFullProcessImageName: Access is denied.
|
|||
|---|---|---|---|
|
#18+
ProcessImage Dimitry Sibiryakov , все же ключевой момент был не в этом, а в выделении памяти:И прислушайся к совету Дмитрия... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 00:51 |
|
||
|
QueryFullProcessImageName: Access is denied.
|
|||
|---|---|---|---|
|
#18+
White Owl , так я уже ко всем прислушался :-) Код: plaintext 1. 2. Но на самом деле, выделение массива под один символ тоже работает и это очень смущает. Я не успокоился и для теста записал в lpExeName больше 1000 знаков, где lpExeName: Код: plaintext 1. - никакого Access Violation'а =| ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 01:53 |
|
||
|
QueryFullProcessImageName: Access is denied.
|
|||
|---|---|---|---|
|
#18+
ProcessImageНо на самом деле, выделение массива под один символ тоже работает и это очень смущает. Я не успокоился и для теста записал в lpExeName больше 1000 знаков, где lpExeName: Код: plaintext 1. - никакого Access Violation'а =|Просто повезло. 1) ОС тебя пристрелит когда ты полезешь в чужую память. 2) ОС физически не может выделить тебе ровно один байт. Она выделяет один байт, плюс структуру - описывающую что "вот тут один байт занят". Как именно выглядит эта структура и где она находися знает только ОС. Ты не имеешь права туда лазить. Эта структура потом обрабатывается командой delete. 3) Сколько бы ты памяти не запрашивал - ОС всегда выделяет память страницами . Сколько памяти влезает на одну страницу знает только сама ОС. Но обычно размер страницы кратен килобайту, и обычно в странице от 1Кб до 16Кб. 4) Когда ты делаешь new - ОС находит на выданных тебе страницах незанятый кусок памяти соответсвующего размера, если не находит - добавляет тебе страниц. Где конкретно внутри страницы будет выделена память предсказать заранее не возможно. Так что если твой new char выделил один байт в начале страницы, то ты сможешь без последствий вылезти за пределы массива на весь размер страницы. Пока ты за грань страницы не выйдешь - Access Violation ты не получишь. примерно так можно поиграться: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. До скольки это чудо досчитает прежде чем помрет - предсказать почти невозможно. Но то что оно сможет нарисовать число больше чем нуль это почти гарантированно. Подробнее читай Таненбаума. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 03:10 |
|
||
|
QueryFullProcessImageName: Access is denied.
|
|||
|---|---|---|---|
|
#18+
ProcessImage Dimitry Sibiryakov , все же ключевой момент был не в этом, а в выделении памяти: Код: plaintext 1. , на что мне выше намекали. Ребята, это просто пи3/\ец ... Индустрия в опасности... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 12:04 |
|
||
|
QueryFullProcessImageName: Access is denied.
|
|||
|---|---|---|---|
|
#18+
White Owl , благодарю за разъяснения! Если не сложно, то поясните, пожалуйста, следующее. White Owl2) ОС физически не может выделить тебе ровно один байт. Она выделяет один байт, плюс структуру - описывающую что "вот тут один байт занят". Как именно выглядит эта структура и где она находися знает только ОС. Так а что мне делать, если мне необходимо записать всего один символ? Я бы сделал так: Код: plaintext 1. Но Вы говорите про структуру, про которую мы ничего знать не можем. Так как я могу позаботиться о свободном месте для этой структуры? Плюсовать на всякий случай всегда по 2-10 байт? :) White Owlпримерно так можно поиграться: ... До скольки это чудо досчитает прежде чем помрет - предсказать почти невозможно. Но то что оно сможет нарисовать число больше чем нуль это почти гарантированно. У меня это чудо вылетает на числе 37627. 1. White OwlСколько памяти влезает на одну страницу знает только сама ОС. Но обычно размер страницы кратен килобайту, и обычно в странице от 1Кб до 16Кб. 37627 - это явно больше 16К Б . Получается, что ОС предоставила больше одной страницы? 2. Интересно то, что это число повторяется, когда я запускаю программу вновь. И где же Random Access Memory в таком случае? Или дело в том, что при запуске приложения ОС просто предоставляет ту же самую страницу/страницы? White OwlПодробнее читай Таненбаума. А что именно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 13:52 |
|
||
|
QueryFullProcessImageName: Access is denied.
|
|||
|---|---|---|---|
|
#18+
ProcessImageЕсли не сложно, то поясните, пожалуйста, следующее. .... Но Вы говорите про структуру, про которую мы ничего знать не можем. Так как я могу позаботиться о свободном месте для этой структуры? Плюсовать на всякий случай всегда по 2-10 байт? :)Кажется я зря упомянул об этой стороне memory management.... На данном этапе можешь смело забыть про эту структуру и не обращать на нее внимание. Пока ты пишешь приложения, тебе лично ничего делать не надо. Просто те несколько байт которые будут описывать твой запрошенный кусок памяти в один байт тоже будут занимать некоторое место в памяти. Иными словами, если ты запросишь один кусок в тысячу байт, то ОС даст твоему процессу 1000+X байт. А если ты выделишь тысячу кусков памяти по одному байту каждый, то это займет 1000+X*1000 байт. С точки зрения твоего процесса оба случая хороши. С точки зрения остальных процессов - твой будет жадиной хапающим много памяти. Самому тебе заботиться о месте под эти X*1000 байт не нужно, это внутренние дела ОС. Но они всегда будут присутствовать и отъедать какой-то объем памяти... ProcessImage37627 - это явно больше 16К Б . Получается, что ОС предоставила больше одной страницы?Это возможно. Не зная потрохов конкретной ОС и ее настроек нельзя предсказать сколько памяти будет выделено процессу при старте. ProcessImage2. Интересно то, что это число повторяется, когда я запускаю программу вновь. И где же Random Access Memory в таком случае? Или дело в том, что при запуске приложения ОС просто предоставляет ту же самую страницу/страницы?Не ту-же саму, а с теми же параметрами. И да, в пределах одной машины оно будет повторяться пока ты не сделаешь перенастройку ОС, не добавишь/уберешь памяти, не сменишь размер файла подкачки, не сделаешь другие настройки компилятора (который может сменить минимальные требования приложения). Там много параметров... Запусти эту-же программку на другой машине, или собери ее в другом компиляторе - скорее всего получишь другое число. Но оно опять будет повторяться. ProcessImageWhite OwlПодробнее читай Таненбаума. А что именно?Все. Весь учебник. http://www.amazon.com/Modern-Operating-Systems-3rd-Edition/dp/0136006639 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 20:30 |
|
||
|
QueryFullProcessImageName: Access is denied.
|
|||
|---|---|---|---|
|
#18+
ProcessImage, авторНо Вы говорите про структуру, про которую мы ничего знать не можем. Так как я могу позаботиться о свободном месте для этой структуры? Плюсовать на всякий случай всегда по 2-10 байт? :) Это общее место во многих API на С и в API многих OS. И тут существует два подхода: Приложение или клиент библиотеки выделяет буфер какого-то заранее достаточного и большого размера, но если его не хватает , функция API или библиотеки выдаёт ошибку (и, видимо, не заполняет буфер). Функция API или библиотеки имеет два режима работы. В первом режиме буфер не указывается (NULL), и функция подсчитывает и возвращает достаточный размер для буфера. Затем приложение выделяет буфер нужного размера и снова вызывает функцию, уже указывая буфер. Функция API или библиотеки отрабатывает во втором режиме и уже заполняет буфер. По первой схеме работает например http://msdn.microsoft.com/en-us/library/windows/desktop/aa364428(v=vs.85).aspx По второй схеме работает например http://msdn.microsoft.com/en-us/library/windows/desktop/dd374130(v=vs.85).aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 22:54 |
|
||
|
QueryFullProcessImageName: Access is denied.
|
|||
|---|---|---|---|
|
#18+
MasterZiv, добавлю по первому подходу - зачастую у ОС есть стандартные константы для таких случаев. Например, для неюникодного пути это MAX_PATH. Соотв. просто выделяем буфер под путь размера MAX_PATH и не паримся - больше путь гарантированно быть не может. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2014, 23:13 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38566859&tid=2019672]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
90ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
5ms |
| others: | 19ms |
| total: | 226ms |

| 0 / 0 |
