Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];

Вниз

блокировка процессов   Найти похожие ветки 

 
ravennsk   (2003-11-27 14:54) [0]

народ подскажите как сделать так чтоб программа не давала запускать кое какие проги (эт относится к играм).


 
Digitman   (2003-11-27 15:27) [1]

чем "игра" отличается от "НЕ игра" ?


 
nejest   (2003-11-27 15:43) [2]

в программе ставишиь таймер и через заданные промежутки времени получаешь список процессов, и если запрещённые проги есть в списке процессов прибивать их.


 
Digitman   (2003-11-27 15:56) [3]


> nejest


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


 
GrandleBugenShpreh   (2003-11-27 17:41) [4]

to Digitman

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


А кто мешает вести список только разрешенных к запуску приложений ??? Тогда он НИЧЕГО лишнего не запустит, а надо будет - пусть админ посмотрит что за прога и внесет в список.


 
DeadMeat   (2003-11-27 19:58) [5]

> ravennsk
А где это будет использоваться...? В смысле школа, университет, офис, интернет салон??...


 
Игорь Шевченко   (2003-11-27 20:07) [6]

Policy


 
DVM   (2003-11-27 21:43) [7]


> юзер-то нонче шибко умный пошел) ... пронюхает про твой
> таймер да список процессов, переименует исп.файл

если своя оболочка и разрешено запускать ограниченный круг программ, то не переименует.

И как уже сказал DeadMeat, надо не запрещать запускать что-то, а разрешать запускать только то, что надо.


 
panov   (2003-11-27 23:23) [8]

Вот абсолютно точный ответ - Игорь Шевченко © (27.11.03 20:07) [6]
Средства ОС позволяют решить эту задачу.


 
ravennsk   (2003-11-28 07:36) [9]

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


 
Hooch   (2003-11-28 07:38) [10]

Удалено модератором
Примечание: Offtopic


 
ravennsk   (2003-11-28 08:16) [11]

Удалено модератором
Примечание: Offtopic


 
Digitman   (2003-11-28 08:19) [12]


> ravennsk


> я пишу прогу


а чего ее писать ?)
уже все давно написано Майкрософтом для тебя !

тебе ж сказали - смотри настройки локальных и пользовательских/групповых политик ... там все это есть


 
ravennsk   (2003-11-28 08:22) [13]

в политиках не совсем то ...... в настройках политики не запретишь запуск определенных программ


 
Digitman   (2003-11-28 08:42) [14]

зато разрешишь запуск строго определенных


 
ravennsk   (2003-11-28 08:45) [15]

а мне не надо запуск определённых, мне надо запрет определённых


 
Nikolay M.   (2003-11-28 09:29) [16]

А каким образом определяется, что есть игра, а что - работа?
Где гарантия, что MS не выпустит Ексель 2005 под именем quake3D.exe?

А вообще, имхо, это личное дело каждого, чем ему заниматься на рабочем месте. Лишь бы работа делалась вовремя и в случае возникновения глюков их можно было разрулить. Мне что прикажете, если я работаю в команде и жду, пока остальные доделают свою часть работы, сидеть, тупить в монитор и переставлять иконки на десктопе? Так я лучше анекдоты почитаю. Или документацию (зависит от настроения). Или поиграю. Кто как отдыхает, тот так и работает.
Все вышесказанное - имхо.


 
Digitman   (2003-11-28 09:41) [17]


> мне надо запрет определённых


ну что значит "определенных" ? с заранее известным именем исп.файла что ли ?


 
ravennsk   (2003-11-28 10:06) [18]

я знаю во что народ играет, и мне не составляет труда выяснить файл запускаемый..... так скажете как запретить выполнение файла?


 
ravennsk   (2003-11-28 10:06) [19]

а список то я уже и сам вручную состовлю, во что народу играть а во что и не стоит


 
Digitman   (2003-11-28 10:15) [20]


> ravennsk


ну раз ты такой упрямый, реализуй глоб.перехват вызова ф-ции CreateProcess[Ex]


 
Игорь Шевченко   (2003-11-28 12:20) [21]

ravennsk © (28.11.03 08:45)

И все-таки, Policy.
Потому что никакой перехват тебе не поможет запретить вызов программы с именем Excel.exe.


 
ravennsk   (2003-11-28 12:41) [22]

эт почему????


 
Игорь Шевченко   (2003-11-28 13:31) [23]

ravennsk © (28.11.03 12:41)

Потому что нужная и полезная программа, по твоей терминологии :)


 
ravennsk   (2003-11-28 14:27) [24]

ну так как ктонить скажет? а то наговорили то много но все не особо то и нужное. скажите чем перехватить и как сделать?


 
Digitman   (2003-11-28 14:32) [25]

держи) это - ключевые ф-ции в механизме перехвата для NT-платформы из-под Ring3 ... и попробуй только хныкнуть, мол, ничего тут не понимаю, куда это вставить и пр. и пр.


procedure RtlEnterCriticalSection(pSection: Pointer); stdcall; external NTDLL_LIB;
procedure RtlLeaveCriticalSection(pSection: Pointer); stdcall; external NTDLL_LIB;

function GetCurrentPEB: PPEB;
asm
mov eax, fs:[TTeb.Peb]
end;

procedure LockPEB(PEB: PPEB);
begin
RtlEnterCriticalSection(PEB.FastPebLock);
end;

procedure UnlockPEB(PEB: PPEB);
begin
RtlLeaveCriticalSection(PEB.FastPebLock);
end;

procedure LockLoader(PEB: PPEB);
begin
RtlEnterCriticalSection(PEB.LoaderLock);
end;

procedure UnlockLoader(PEB: PPEB);
begin
RtlLeaveCriticalSection(PEB.LoaderLock);
end;

function GetMainThreadId: DWord;
const
TEB_ALIGNMENT = $1000;
asm
mov eax, fs:[TNtTib.Self]
and eax, eax
jz @@exit
mov eax, [eax].TTeb.Peb
and eax, eax
jz @@exit
sub eax, TEB_ALIGNMENT
mov eax, [eax].TTeb.ClientId.UniqueThread
@@exit:
end;

function FindModuleInfo(hModule: THandle): PModuleInfo;
var
Peb: PPeb;
pLdrData : PPEB_LDR_DATA;
pLoadOrderList : PPLIST_ENTRY;
pInLoadModuleEntry: PModuleEntry;
begin
Result := nil;
if hModule = 0 then Exit;
Peb := GetCurrentPeb;
LockLoader(Peb);
try
pLdrData := Peb^.LdrData;
pLoadOrderList := @pLdrData.InLoadOrderModuleList;
pInLoadModuleEntry := PModuleEntry(pLoadOrderList^);
while PPListEntry(pInLoadModuleEntry) <> pLoadOrderList do
begin
Result := @pInLoadModuleEntry.ModuleInfoData;
if Result^.DllBase = Pointer(hModule) then
Exit;
pInLoadModuleEntry := PModuleEntry(pInLoadModuleEntry.InLoadOrderLinks.Flink);
end;
Result := nil;
finally
UnLockLoader(Peb);
end;
end;



 
Digitman   (2003-11-28 14:32) [26]

function GetModuleInfo(lpModule: PChar; out ModuleInfo: TModuleInfo): Boolean;
var
peb: PPeb;
hModule: THandle;
pLdrData : PPEB_LDR_DATA;
pLoadOrderList : PPLIST_ENTRY;
pInLoadModuleEntry: PModuleEntry;
pModuleNfo: PModuleInfo;
begin
Result := False;
if not Assigned(lpModule) then Exit;
peb := GetCurrentPeb;
LockLoader(Peb);
try
hModule := FindHInstance(lpModule);
if hModule = 0 then Exit;
if hModule <> THandle(lpModule) then
hModule := GetModuleHandle(lpModule);
if hModule = 0 then Exit;
pLdrData := peb^.LdrData;
pLoadOrderList := @pLdrData.InLoadOrderModuleList;
pInLoadModuleEntry := PModuleEntry(pLoadOrderList^);
while PPListEntry(pInLoadModuleEntry) <> pLoadOrderList do
begin
pModuleNfo := @pInLoadModuleEntry.ModuleInfoData;
if pModuleNfo^.DllBase = Pointer(hModule) then
begin
if Assigned(@ModuleInfo) then
ModuleInfo := pModuleNfo^;
Result := True;
Break;
end;
pInLoadModuleEntry := PModuleEntry(pInLoadModuleEntry.InLoadOrderLinks.Flink);
end;
finally
UnLockLoader(Peb);
end;
end;

function SetProcAddress(hModule: THandle; lpProcName: PChar; pProcAddr: Pointer): Boolean;
var
Peb: PPeb;
hProcess, hImporter: THandle;
pOptHdr: PImageOptionalHeader;
pImpDir: PImageImportDescriptor;
pExpDir: PImageExportDirectory;
pIATEntry: PImageThunkData;
pOldProcAddr: Pointer;
pdwNamePtr, pdwEntryPoint: PDWord;
pName: PChar;
pwOrdinalPtr: PWord;
i, nOrdinal, dwNewProcAddrRVA, dwProtect: DWord;
pLdrData : PPEB_LDR_DATA;
pLoadOrderList : PPLIST_ENTRY;
pInLoadModuleEntry: PModuleEntry;
pModuleNfo: PModuleInfo;
pImpModuleNfo: PModuleInfo;
sModuleName: String;
dwDirSize: DWord;
begin
Result := False;
if (hModule = 0) or (lpProcName = nil) then Exit;
peb := GetCurrentPEB;
LockLoader(Peb);
try
pModuleNfo := FindModuleInfo(hModule);
if not Assigned(pModuleNfo) then Exit;
sModuleName := WideCharToString(pModuleNfo^.BaseDllName.Buffer);
pOptHdr := PImageOptionalHeader(hModule + PImageDosHeader(hModule)._lfanew + SIZE_OF_NT_SIGNATURE + IMAGE_SIZEOF_FILE_HEADER);
dwDirSize := pOptHdr.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].Size;
if (pOptHdr^.NumberOfRvaAndSizes < 16) or (dwDirSize = 0) then Exit;
pExpDir := PImageExportDirectory(hModule + pOptHdr.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress);
pdwEntryPoint := nil;
pwOrdinalPtr := PWord(hModule + DWord(pExpDir^.AddressOfNameOrdinals));
if HiWord(DWord(lpProcName)) = 0 then
begin
nOrdinal := LoWord(DWord(lpProcName)) - pExpDir^.Base;
if (nOrdinal < pExpDir^.NumberOfFunctions) then
pdwEntryPoint := PDWord(hModule + DWord(pExpDir^.AddressOfFunctions) + nOrdinal * SizeOf(PDWord));
end
else
begin
pdwNamePtr := PDWord(hModule + DWord(pExpDir^.AddressOfNames));
for i := 0 to pExpDir^.NumberOfNames - 1 do
begin
pName := PChar(PDWord(hModule + PDword(pdwNamePtr)^));
if lstrcmp(pName,lpProcName) = 0 then
begin
nOrdinal := pwOrdinalPtr^;
pdwEntryPoint := PDWord(hModule + DWord(pExpDir^.AddressOfFunctions) + nOrdinal * SizeOf(PDWord));
Inc(nOrdinal, pExpDir^.Base);
Break;
end
else
begin
Inc(pdwNamePtr);
Inc(pwOrdinalPtr);
end
end;
end;
if not Assigned(pdwEntryPoint) then Exit;
pOldProcAddr := Pointer(hModule + pdwEntryPoint^);
if pOldProcAddr = pProcAddr then
Result := True
else
try
dwNewProcAddrRVA := DWord(pProcAddr) - hModule;
hProcess := OpenProcess(PROCESS_VM_OPERATION, False, GetCurrentProcessId);
Win32Check(hProcess <> 0);
try
Win32Check(VirtualProtectEx(hProcess, pExpDir, dwDirSize, PAGE_WRITECOPY, dwProtect));
try
pdwEntryPoint^ := dwNewProcAddrRVA;
finally
VirtualProtectEx(hProcess, pExpDir, dwDirSize, dwProtect, dwProtect);
end;
pName := PChar(sModuleName);
pLdrData := Peb^.LdrData;
pLoadOrderList := @pLdrData.InLoadOrderModuleList;
pInLoadModuleEntry := PModuleEntry(pLoadOrderList^);
while PPListEntry(pInLoadModuleEntry) <> pLoadOrderList do
begin
pImpModuleNfo := @pInLoadModuleEntry.ModuleInfoData;
if pImpModuleNfo <> pModuleNfo then
begin
hImporter := THandle(pImpModuleNfo^.DllBase);
pOptHdr := PImageOptionalHeader(hImporter + PImageDosHeader(hImporter)._lfanew + SIZE_OF_NT_SIGNATURE + IMAGE_SIZEOF_FILE_HEADER);
if pOptHdr^.NumberOfRvaAndSizes = 16 then
begin
dwDirSize := pOptHdr^.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].Size;
if dwDirSize > 0 then
begin
pImpDir := PImageImportDescriptor(hImporter + pOptHdr^.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);
while Assigned(PChar(pImpDir^.RVAImportModuleName)) do
begin
if lstrcmpi(PChar(hImporter + pImpDir^.RVAImportModuleName), pName) = 0 then
begin
pIATEntry := PImageThunkData(hImporter + DWord(pImpDir^.RVAImportAddressTable));
while Assigned(pIATEntry^.Func) do
begin
if pIATEntry^.Func = pOldProcAddr then
begin
Win32Check(VirtualProtectEx(hProcess, pIATEntry, SizeOf(pIATEntry), PAGE_WRITECOPY, dwProtect));
try
pIATEntry^.Func := pProcAddr;
finally
VirtualProtectEx(hProcess, pIATEntry, SizeOf(pIATEntry), dwProtect, dwProtect);
end;
Break;
end;
Inc(pIATEntry);
end;
end;
Inc(pImpDir);
end;
end;
end;
end;
pInLoadModuleEntry := PModuleEntry(pInLoadModuleEntry.InLoadOrderLinks.Flink);
end;
finally
CloseHandle(hProcess);
end;
Result := True;
except
end;
finally
UnLockLoader(Peb);
end;
end;



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.53 MB
Время: 0.027 c
1-16511
Builder
2004-01-27 10:41
2004.02.06
StringGrid


9-16021
Vitas2
2003-06-17 14:03
2004.02.06
Источник света(OpenGL)


7-16768
InVariantian
2003-11-17 15:30
2004.02.06
Камера видеонаблюдения.


6-16557
AnettoII
2003-12-02 22:48
2004.02.06
Как отследить в программе начало сессии?


14-16700
Igorek
2004-01-16 13:50
2004.02.06
А что, html код при скачивании не сжимается?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский