Estoy tratando de escribir en los puertos 0x60 y 0x64, sin suerte.¿Cómo escribir en puertos de E/S en Windows XP? (Delphi7)
código de Delphi:
procedure PortOut(IOport: WORD; Value: BYTE); assembler; register;
asm
XCHG DX,AX
OUT DX,AL
end;
Al llamar PortOut, me sale una instrucción privilegiada EPrivilege excepción, porque IN
y OUT
sólo se puede ejecutar como Ring0.
Me gustaría saber cómo puedo obtener privilegios de Ring0 en una aplicación o cómo podría escribir en los puertos 0x60 y 0x64 usando alguna biblioteca externa existente.
He resuelto el problema más rápido con la respuesta de stukelly; alexandrul también publicó una respuesta perfectamente funcional. – Tom
Si usted va a utilizar las diversas DLL de puerto IO por ahí que no han resuelto el problema. Solo has profundizado en ello. Yo preveo MUCHOS BSOD (o lo que sea que los haya reemplazado en Windows 7) en el futuro de su software. –
@ttmrichter En realidad, IO.DLL funciona increíblemente bien (excepto que es sólo de 32 bits y el autor dijo que sería muy difícil de hacer uno para x64 y no molesta). No he tenido ningún problema en absoluto y todo el mundo está contento con el resultado en Windows 2000, XP y 7. – Tom