Сейчас на форуме: hgdagon, asfa, bartolomeo (+4 невидимых) |
![]() |
eXeL@B —› Программирование —› Написание NativeAPI - приложений |
<< . 1 . 2 . |
Посл.ответ | Сообщение |
|
Создано: 07 января 2007 08:54 · Личное сообщение · #1 Всё начилось с того, что решил перенести участок кода: for(int i = 10; i >= 0; i--) { Sleep (1000); printf ("Timer: %d second(s). ", i); } который на С++ в Win32 консольном приложении работает нормально, теперь переписываю на NativeAPI и столкнулся с проблемой: Функция Sleep вызывает SleepEx, а она ZwDelayExecution(), так вот написав программу линкер говорит что функцию не знает хотя другие всё нормально (типа ZwCreateFile, ZwReadFile, ZwWriteFile ,ZwClose....). Короче проверил DDK, там её нет друзья говорят, что она недокументированна и её описания нет в DDK посоветовали попробовать вызвать её непосредственно из Ntdll.dll, в Windows-приложении типа так: #define _WIN32_WINNT 0x0500 #include <windows.h> #include <winternl.h> NTSTATUS (__stdcall *NtDelayExecution)(BOOL, const LARGE_INTEGER*); int main() { LARGE_INTEGER la; la.QuadPart = -10000000i64; // Пауза в 1 секунду NtDelayExecution=(NTSTATUS (__stdcall *)(BOOL, const LARGE_INTEGER*)) GetProcAddress(GetModuleHandle("ntdll.dll"), "NtDelayExecution"); if(NtDelayExecution==NULL) MessageBox(NULL, "GetProcAddress() fail", "test", MB_OK); else NtDelayExecution(FALSE, &la); } но я пишу NativeAPI приложение и использовать WinAPI не могу так же как и при разработке драйверов. Кроме того ни NtGetProcAddress() ни NtGetModuleHandle() в Ntdll.dll и впомине нет, зато узнал, что часть экспортируемых функций из Ntdll.dll с префиксом Ldr - являются загрузчиками образа, например: LdrGetDllHandle( IN PWORD pwPath OPTIONAL, IN PVOID Unused OPTIONAL, IN PUNICODE_STRING ModuleFileName, OUT PHANDLE pHModule ); LdrGetProcedureAddress( IN HMODULE ModuleHandle, IN PANSI_STRING FunctionName OPTIONAL, IN WORD Oridinal OPTIONAL, OUT PVOID *FunctionAddress ); LdrLoadDll( IN PWCHAR PathToFile OPTIONAL, IN ULONG Flags OPTIONAL, IN PUNICODE_STRING ModuleFileName, OUT PHANDLE ModuleHandle ); Не подскажите всё-таки возможно ли перенести данный участок простенького кода? Другие функции Ldr из библиотеки Ntdll.dll LdrAccessOutOfProcessResource LdrAccessResource LdrAddRefDll LdrAlternateResourcesEnabled LdrCreateOutOfProcessImage LdrDestroyOutOfProcessImage LdrDisableThreadCalloutsForDll LdrEnumResources LdrEnumerateLoadedModules LdrFindCreateProcessManifest LdrFindEntryForAddress LdrFindResourceDirectory LdrFindResourceEx LdrFindResource LdrFlushAlternateResourceModules LdrGetDllHandle LdrGetDllHandleEx LdrGetProcedureAddress LdrHotPatchRoutine LdrInitShimEngineDynamic LdrInitializeThunk LdrLoadAlternateResourceModule LdrLoadDll LdrLockLoaderLock LdrProcessRelocationBlock LdrQueryImageFileExecutionOptions LdrQueryProcessModuleInformation LdrSetAppCompatDllRedirectionCallback LdrSetDllManifestProber LdrShutdownProcess LdrShutdownThread LdrUnloadAlternateResourceModule LdrUnloadDll LdrUnlockLoaderLock LdrVerifyImageMatchesChecksum ![]() |
|
Создано: 11 января 2007 12:25 · Личное сообщение · #2 |
|
Создано: 11 января 2007 12:28 · Личное сообщение · #3 |
|
Создано: 11 января 2007 12:34 · Личное сообщение · #4 |
|
Создано: 13 января 2007 14:09 · Личное сообщение · #5 |
<< . 1 . 2 . |
![]() |
eXeL@B —› Программирование —› Написание NativeAPI - приложений |