我无法在窗口7位64位平台上写入并行端口的控制寄存器,为什么?

问题描述 投票:-1回答:1

我使用inpout32.dll来处理我的电脑上的并行端口。我发现我可以在Windows 7 32bit上更改控制寄存器(0x37a)的值,但我不能在64位上。

谁知道原因?

dll的主页是http://www.highrez.co.uk/

我按如下方式粘贴inpoutx64.sys的源代码,它非常简单,只需调用WRITE_PORT_UCHAR系统api,64bit版本和32bit版本的这个功能有什么区别吗?

NTSTATUS hwinterfaceDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP pIrp)
{
PIO_STACK_LOCATION  stkloc;
NTSTATUS            ntStatus = STATUS_SUCCESS; 
struct              tagPhys32Struct Phys32Struct;

PUCHAR              cData;
PUSHORT             sData;
PULONG              lData;
PUSHORT             address;

ULONG               inBuffersize;   
ULONG               outBuffersize;  
ULONG               inBuf;         
PVOID               CtrlBuff;

stkloc = IoGetCurrentIrpStackLocation( pIrp );
inBuffersize = stkloc->Parameters.DeviceIoControl.InputBufferLength;
outBuffersize = stkloc->Parameters.DeviceIoControl.OutputBufferLength;

CtrlBuff    = pIrp->AssociatedIrp.SystemBuffer;
cData  = (PUCHAR) CtrlBuff;
sData  = (PUSHORT) CtrlBuff;
lData  = (PULONG) CtrlBuff;
address = (PUSHORT) CtrlBuff;

switch ( stkloc->Parameters.DeviceIoControl.IoControlCode )
 {
    case IOCTL_READ_PORT_UCHAR:
        if ((inBuffersize >= 2) && (outBuffersize >= 1)) 
        {
            UCHAR value;
            value = READ_PORT_UCHAR((PUCHAR)address[0]);
            cData[0] = value;
        } 
        else 
        {   
            ntStatus = STATUS_BUFFER_TOO_SMALL;
        }
        pIrp->IoStatus.Information = sizeof(UCHAR); 
        ntStatus = STATUS_SUCCESS;

        break;
    case IOCTL_WRITE_PORT_UCHAR:
        if (inBuffersize >= 3) 
        {
            WRITE_PORT_UCHAR((PUCHAR)address[0], cData[2]); //Byte 0,1=Address Byte 2=Value
            pIrp->IoStatus.Information = 10;
        } 
        else 
        {
            ntStatus = STATUS_BUFFER_TOO_SMALL;
            pIrp->IoStatus.Information = 0; 
            ntStatus = STATUS_SUCCESS;
        }
        break;
64bit driver hardware parallel-port
1个回答
-1
投票

我认为您对硬件架构有一些了解,64位架构完全改变,并且可以针对硬件级别或软件级别保护更改寄存器值。

试着分享你想做什么,你的问题不要清楚你的主要交易。

© www.soinside.com 2019 - 2024. All rights reserved.