bueno me toca colocar codigo si no no se entiende
(sigo obsecionado con la creacion de drivers en delphi)
compilo un driver con Meerkat 1.1 Beta 1
al arrancar mi programa se instala el servicio y se activa
el sys perfectamente(al cerrar tambien finaliza ok)
el problema es que Meerkat 1.1 Beta 1 no me compila con sysutils
en mi loader el codigo esta asi
Código: Seleccionar todo
procedure TForm1.btnWriteClick(Sender: TObject);
var
dwBytesReturned: DWORD;
outBuffer: array[0..100] of AnsiChar;
begin
FillChar(outBuffer, SizeOf(outBuffer), 0);
StrCopy(outBuffer, PAnsiChar(AnsiString(edtWrite.text)));
if Length(edtWrite.Text) > 0 then
begin
WriteFile(g_hDevice, outBuffer,
Length(outBuffer),
dwBytesReturned, nil);
end else
begin
ShowMessage('ingrese el pid !');
edtWrite.SetFocus;
end;
end;
en el driver
Código: Seleccionar todo
function WriteDispatch(DeviceObject: PDEVICE_OBJECT;Irp: PIRP):NTSTATUS;stdcall;
var
pIoStackIrp :PIO_STACK_LOCATION ;
pWriteDataBuffer: PAnsiChar ;
hProcess: Thandle;
pid:dword;
begin
DbgPrint('DirectIO: WriteDispatch'#13#10);
pWriteDataBuffer := nil;
pIoStackIrp := IoGetCurrentIrpStackLocation(Irp);
if pIoStackIrp <> nil then
begin
if Irp^.MdlAddress <> nil then
pWriteDataBuffer:= MmGetSystemAddressForMdlSafe(Irp^.MdlAddress, NormalPagePriority)
else
pWriteDataBuffer := Irp^.UserBuffer;
if pWriteDataBuffer = nil then
begin
pWriteDataBuffer := Irp^.AssociatedIrp.SystemBuffer;
end;
if pWriteDataBuffer <> nil then
if Example_IsStringTerminated(pWriteDataBuffer,
pIoStackIrp^.Parameters.Write.Length) then begin
DbgPrint('DirectIO: %s'#13#10, pWriteDataBuffer);
pid:=dword(pWriteDataBuffer);//aqui no se puede compilar (strtoint) en Meerkat 1.1 con sysutils
dbgprint('este es el pid',pWriteDataBuffer);
hProcess := OpenProcess(pid);
if hProcess <> 0 then
begin
DbgPrint('OpenProcess: Success -->> Process handle is:0x%X', hProcess);
if ZwTerminateProcess(hProcess, 0) = 0 then
DbgPrint('ZwTerminateProcess - Killed')
else
DbgPrint('ZwTerminateProcess - Failed');
end
else
DbgPrint('OpenProcess: Failed to get Process handle');//siempr me devuelve este mensaje al no recivir el pid correcto
ZwClose(hProcess);
end;
Irp^.IoStatus.Status:= STATUS_SUCCESS;
Irp^.IoStatus.Information:= 0;
IoCompleteRequest(IRP,IO_NO_INCREMENT);
Result:=STATUS_SUCCESS;
end;
end;
ya estoy atorado de manuales