28-01-2010, 02:28 PM
السلام عليكم
1- أظن أن الأستاذ STRELiTZIA يريد أن نعمل برنامج يستقبل إستدعاءات النظام
لهده الدوال + تغير مسار الإستدعاء الأصلي الى الدوال الجديدة (NewZwXXXHook) .
يعني Hook & Filter (حسب معلوماتي) .
2- أكملت الواجهة + الأن **** إستقبال معلومات من الـ Kernel (مبدئيا StringBuffer )
خطوة خطوة .
هذا إجتهادي إن كان خطا ****ا التصحيح .... لكن المشكلة هنا هي الدالة RtlCopyMemory
أعدت تعريفها من الـ ntoskrnl لكن لم ينجح الإستدعاء هكذا :
هل من الممكن أن يكون لنسخة النظام تأثير (تبديل الدالة لإسم أخر) أم أخطأت في مصدر التصدير ؟؟
1- أظن أن الأستاذ STRELiTZIA يريد أن نعمل برنامج يستقبل إستدعاءات النظام
لهده الدوال + تغير مسار الإستدعاء الأصلي الى الدوال الجديدة (NewZwXXXHook) .
يعني Hook & Filter (حسب معلوماتي) .
2- أكملت الواجهة + الأن **** إستقبال معلومات من الـ Kernel (مبدئيا StringBuffer )
خطوة خطوة .
PHP كود :
function DispatchRead(p_DeviceObject: PDEVICE_OBJECT; p_Irp: PIRP):
NTSTATUS; stdcall;
Var
CurrentIrpStack:PIO_STACK_LOCATION;
pDevExt:PDEVICE_EXTENSION;
userBuffer:PVOID;
xferSize:ULONG;
begin
DbgPrint('DispatchRead!');
// The stack location contains the user buffer info
CurrentIrpStack:= IoGetCurrentIrpStackLocation(p_Irp);
// Dig out the Device Extension from the Device object
pDevExt:= p_DeviceObject.DeviceExtension;
// Determine the length of the request
xferSize:=CurrentIrpStack.Parameters.Read.Length;
userBuffer:=p_Irp.AssociatedIrp.SystemBuffer;
// Don't transfer more than the user's request
// ...
// Now copy the pool buffer into user space
RtlCopyMemory(userBuffer,pDevExt.deviceBuffer,xferSize);
// Free pool buffer
ExFreePool(pDevExt.deviceBuffer);
pDevExt.deviceBuffer := Nil;
pDevExt.deviceBufferSize := 0;
// Now complete the IRP
p_Irp^.IoStatus.Status := STATUS_SUCCESS;
p_Irp^.IoStatus.Information := xferSize;
IofCompleteRequest(p_Irp, IO_NO_INCREMENT);
result := STATUS_SUCCESS;
end;
هذا إجتهادي إن كان خطا ****ا التصحيح .... لكن المشكلة هنا هي الدالة RtlCopyMemory
أعدت تعريفها من الـ ntoskrnl لكن لم ينجح الإستدعاء هكذا :
PHP كود :
const
NtKernel='ntoskrnl.exe';
procedure RtlCopyMemory(Destination : PVOID ;Source: PVOID;Length: SIZE_T );StdCall;
-
implementation
-
procedure RtlCopyMemory; external NtKernel name '_RtlCopyMemory';
هل من الممكن أن يكون لنسخة النظام تأثير (تبديل الدالة لإسم أخر) أم أخطأت في مصدر التصدير ؟؟
I'M Fly Like A G6

