|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.04.2012, 12:12 | #1 |
Пользователь
Регистрация: 06.04.2012
Сообщений: 12
|
Format '%1' invalid or incompatible with argument
Доброе время суток всем.
пытаюсь написать dll. Вот такую ошибку выдает делфи... Точнее не ошибку, а при компиляции просто выскакивает вот такая штука((((((( как мне быть??? |
06.04.2012, 12:12 | #2 |
Форумчанин
Регистрация: 25.08.2010
Сообщений: 258
|
Код вылажи плиз
|
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 |
Форумчанин
Регистрация: 25.08.2010
Сообщений: 258
|
Во первых, ты окуда его брал? Пробелы стоят в названии переменных!
А во вторых - что за переменная - MyNtQuerySystemInfo. Она у тя даже не обявлена |
06.04.2012, 12:36 | #7 | ||
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Цитата:
Цитата:
|
||
06.04.2012, 12:45 | #8 |
Пользователь
Регистрация: 06.04.2012
Сообщений: 12
|
где сама "штука" и откуда она выскакивает?
при компиляции!!! а где брал, вот http://forum.developing.ru/showthrea...%D1%8B-Windows |
06.04.2012, 12:52 | #9 |
Форумчанин
Регистрация: 25.08.2010
Сообщений: 258
|
А у вас Delphi какая? У мня на 6 все скомпилировалось нормально)
|
06.04.2012, 13:02 | #10 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,882
|
Юрий_) говоря "где" подразумевают место в коде, а не время появления (тогда вопрос был бы "когда")
Очень часто данная ошибка появляется в функции Format, когда фактические параметры не совпадают с лексемами входной строки. В Вашем коде нет функции Format, возможно, в другом месте ошибка. Вы укажите строку (и желательно всю функцию/процедуру в которой строка) на которую дельфи показывает при ошибке. Если же никуда не указывает, то поищите в коде функции Format и попроверяйте по дельфи-справке лексемы (типа %s ) и передаваемые типы переменных. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
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 |