当我加载我的filedisk驱动程序时,我得到了ERROR_PROC_NOT_FOUND(127)错误代码

时间:2013-06-17 08:59:01

标签: windows winapi driver

我想基于 FileDisk-17 开源项目开发加密 - 虚拟磁盘

这是我的解决方案:

IPR_MJ_READ中,当ZwReadFile返回时,我使用函数“DecryptData”来解密ZwReadFile读取的数据。

IPR_MJ_WRITE中,在致电ZwWriteFile之前,我使用函数“EncryptData”来加密将写入磁盘的数据。

我把EncryptData& DecryptData在单个C源文件中起作用。

问题是;当我加载我的驱动程序时,我收到ERROR_PROC_NOT_FOUND(127)错误代码 每次,即使EncryptDataDecryptData函数中只有一行。

谁能告诉我是什么导致这种情况以及如何解决?

filedisk.c

switch (io_stack->MajorFunction)
        {
        case IRP_MJ_READ:
            system_buffer = (PUCHAR) MmGetSystemAddressForMdlSafe(irp->MdlAddress, NormalPagePriority);
            if (system_buffer == NULL)
            {
                irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES;
                irp->IoStatus.Information = 0;
                break;
            }
            buffer = (PUCHAR) ExAllocatePool(PagedPool, io_stack->Parameters.Read.Length);
            if (buffer == NULL)
            {
                irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES;
                irp->IoStatus.Information = 0;
                break;
            }
            ZwReadFile(
                device_extension->file_handle,
                NULL,
                NULL,
                NULL,
                &irp->IoStatus,
                buffer,
                io_stack->Parameters.Read.Length,
                &io_stack->Parameters.Read.ByteOffset,
                NULL
                );
            *if(bEncrypt)
            {
                cipher = (PUCHAR)ExAllocatePoolWithTag(NonPagedPool, irp->IoStatus.Information, 'TAG');
                if(cipher)
                {   
                    **DecryptData**(buffer, cipher, irp->IoStatus.Information);
                    RtlCopyMemory(system_buffer, cipher, irp->IoStatus.Information);
                    ExFreePool(cipher);
                }
                else
                {
                    irp->IoStatus.Status = STATUS_INSUFFICIENT_RESOURCES;
                    irp->IoStatus.Information = 0;
                    break;
                }
            }*
            else
            {
                RtlCopyMemory(system_buffer, buffer, io_stack->Parameters.Read.Length);
                ExFreePool(buffer);
            }

crypto.c

    VOID EncryptData(PUCHAR src, PUCHAR dst, ULONG length)
{
    BF_LONG data[2];
    BF_KEY  key;

    BF_set_key(&key, pCryptoInformation->CryptoKey, sizeof(pCryptoInformation->CryptoKey));
}

VOID DecryptData(PUCHAR src, PUCHAR dst, ULONG length)
{
    BF_LONG data[2];
    BF_KEY  key;

    BF_set_key(&key, pCryptoInformation->CryptoKey, sizeof(pCryptoInformation->CryptoKey));
}

0 个答案:

没有答案