问题描述
我尝试将 cmd8 发送到 emmc/SD,在 createFile 成功后,出现错误 5(访问被拒绝)。我是初学者,从 MSDN 了解 DeviceIOControl,但我不知道如何解决此问题我已经在管理员中运行它并使用 GENERIC_ALL 创建文件。 请帮我!谢谢 !!! CreateFile 成功:
hDevice = CreateFileA(
"\\\\.\\globalroot\\Device\\00000031",GENERIC_READ | GENERIC_WRITE| FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,NULL,OPEN_EXISTING,NULL
);
DeviceIOControl:
int read_extcsd(HANDLE hDevice) {
BOOL bRet = FALSE;
/*
* DeviceIoControl Parameter initialization
*/
int sizeOfInBuffer = sizeof(SFFdisK_DEVICE_COMMAND_DATA) + sizeof(SDCMD_DESCRIPTOR) + 16;
SFFdisK_DEVICE_COMMAND_DATA* InBuffer = (SFFdisK_DEVICE_COMMAND_DATA *)malloc(sizeOfInBuffer);
UINT8 OutBuffer[512];
DWORD ByTesReturned = 0;
/*
* InBuffer(SFFdisK_DEVICE_COMMAND_DATA) Parameter initialization
*/
InBuffer->HeaderSize = sizeof(SFFdisK_DEVICE_COMMAND_DATA);
InBuffer->Command = SFFdisK_DC_DEVICE_COMMAND;
InBuffer->ProtocolArgumentSize = sizeof(SDCMD_DESCRIPTOR);
/*
* InBuffer->Data(SDCMD_DESCRIPTOR) Parameter initialization
*/
SDCMD_DESCRIPTOR CMD8;
CMD8.Cmd = 8;//CMD8
CMD8.CmdClass = SDCC_STANDARD; // Indicates an SD card command from the standard command set. This command set includes command codes 0 to 63.
CMD8.TransferDirection = SDTD_READ;
CMD8.TransferType = SDTT_SINGLE_BLOCK;
CMD8.ResponseType = SDRT_1;// find in JESD84-B51
INT sizeofCMD8 = sizeof(CMD8);
memcpy(&(InBuffer->Data[0]),&CMD8,sizeofCMD8); //save in Data
InBuffer->DeviceDataBufferSize = sizeofCMD8;
/*
* DeviceIoControl
*/
memset(&OutBuffer,sizeof(OutBuffer));
bRet = DeviceIoControl(hDevice,IOCTL_SFFdisK_DEVICE_COMMAND,&InBuffer,sizeOfInBuffer,&OutBuffer,sizeof(OutBuffer),&ByTesReturned,NULL);
printf("asdf\n%h",OutBuffer[0]);
if (bRet == 0)
{
return 0;
}
else {
printf("DeviceIoControl CMD8 OK\n");
}
return 1;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)