Сейчас на форуме: hgdagon, asfa, bartolomeo (+4 невидимых)

 eXeL@B —› Программирование —› Написание NativeAPI - приложений
<< . 1 . 2 .
Посл.ответ Сообщение

Ранг: 36.3 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 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



Ранг: 36.3 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 11 января 2007 12:25
· Личное сообщение · #2

szStr - это разве не ANSI,

UNICODE_STRING string;

sprintf(szStr, "lalala%d%d", x, y);
RtlInitUnicodeString(&string, szStr);

Так что ли... Так а воззврат каретки где же?




Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 11 января 2007 12:28
· Личное сообщение · #3

sxd пишет:
szStr - это разве не ANSI,

Ну я и говорю - если не можешь отформатировать юникод - используй анси а потом переводи в юникод.


Насчет возврата каретки вообще не в курсе - мб можно. Посмотри ссылку - половина вопросов отпадет.



Ранг: 36.3 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 11 января 2007 12:34
· Личное сообщение · #4

Глава №7 "Приемы программирования в режиме ядра"

Ну да так а коретки то нет... Вообще по идеи тогда так получается:

UNICODE_STRING string;

for(i = 0; i < 10; i++)
{
sprintf(szStr, "Timer: %d second ", i);
RtlInitUnicodeString(&string, &szStr);
NtDisplayString(&string);
}



Ранг: 36.3 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 13 января 2007 14:09
· Личное сообщение · #5

У кого-нибудь есть другие варианты?


<< . 1 . 2 .
 eXeL@B —› Программирование —› Написание NativeAPI - приложений
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати