Сейчас на форуме: (+5 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› psapi.dll |
Посл.ответ | Сообщение |
|
Создано: 04 декабря 2010 22:14 · Личное сообщение · #1 Кто-нибудь может обьяснить, почему в нижеприведенном примере использован "SYSTEM_MODULE_INFORMATION_N(1)"? Почему не просто "SYSTEM_MODULE_INFORMATION"? Интуитивно вроде бы все понятно, но хотелось бы знать точно, что это такое, где его определение и любые подробности относящиеся к делу. Свен Шрайбер говорит, что это не точный код для psapi.dll, а так себе "случайный набор символов, который при компилляции дает эквивалентный бинарный код", но это конечно же шутка. BOOL WINAPI EnumDeviceDrivers (PVOID *lpImageBase, DWORD cb, DWORD *lpcbNeeded) { SYSTEM_MODULE_INFORMATION_N(1) smi; PSYSTEM_MODULE_INFORMATION psmi; DWORD dSize, i; NTSTATUS ns; BOOL fOk = FALSE; ns = NtQuerySystemInformation (SystemModuleInformation, &smi, sizeof (smi), NULL); if ((ns == STATUS_SUCCESS) || (ns == STATUS_INFO_LENGTH_MISMATCH)) { dSize = sizeof (SYSTEM_MODULE_INFORMATION) + (smi.dCount * sizeof (SYSTEM_MODULE)); if ((psmi = LocalAlloc (LMEM_FIXED, dSize)) != NULL) { ns = NtQuerySystemInformation (SystemModuleInformation, psmi, dSize, NULL); if (ns == STATUS_SUCCESS) { for (i = 0; (i < psmi->dCount) && (i < cb / sizeof (DWORD)); i++) { lpImageBase [i] = psmi->aModules [i].pImageBase; } *lpcbNeeded = i * sizeof (DWORD); fOk = TRUE; } LocalFree (psmi); if (!fOk) SetLastError (RtlNtStatusToDosError (ns)); } } else { SetLastError (RtlNtStatusToDosError (ns)); } return fOk; } ----- Give me a HANDLE and I will move the Earth. ![]() |
|
Создано: 04 декабря 2010 23:13 · Личное сообщение · #2 |
|
Создано: 04 декабря 2010 23:23 · Личное сообщение · #3 |
|
Создано: 05 декабря 2010 10:01 · Личное сообщение · #4 |
|
Создано: 05 декабря 2010 10:51 · Личное сообщение · #5 |
|
Создано: 05 декабря 2010 13:31 · Личное сообщение · #6 |
|
Создано: 05 декабря 2010 21:16 · Поправил: plutos · Личное сообщение · #7 Вообще я ожидал, что ты это посмотришь там, откуда брал эти сорцы. Да в том-то и дело, что я смотрел-смотрел, но ничего больше не нашел в источнике этих сорцов, а именно в книге С.Шрайбера. Он эту структуру использует один раз и ничего не обьясняет. Просто было интересно почему именно эта стуктура и зачем она. Вобще это псевдокод функции EnumDeviceDrivers(), в исходниках win2k можно посмотреть другую реализацию Тот факт, что это псевдокод обьясняет многое, кроме одного: "Почему он написан ИМЕННО так?" А это и был мой главный вопрос. Спасибо всем, господа! ----- Give me a HANDLE and I will move the Earth. ![]() |
|
Создано: 05 декабря 2010 21:45 · Личное сообщение · #8 |
|
Создано: 05 декабря 2010 21:59 · Поправил: plutos · Личное сообщение · #9 |
|
Создано: 07 декабря 2010 00:37 · Личное сообщение · #10 |
|
Создано: 07 декабря 2010 02:01 · Личное сообщение · #11 |
|
Создано: 07 декабря 2010 02:52 · Личное сообщение · #12 |
|
Создано: 07 декабря 2010 09:51 · Личное сообщение · #13 |
|
Создано: 07 декабря 2010 14:45 · Личное сообщение · #14 А ты придерживаешься мнения что у "Них" нету сорцев винды?! Или думаешь наши юзают никсы или того хуже написали свою ось ). www.google.ru/search?q=%D0%B8%D1%81%D1%85%D0%BE%D0%B4%D0%BD%D0%B8%D0%BA%D0%B8+windows+%D1%83+%D1%84%D1%81%D0%B1&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox ![]() |
|
Создано: 07 декабря 2010 15:09 · Личное сообщение · #15 |
![]() |
eXeL@B —› Вопросы новичков —› psapi.dll |