ntcreatefile(ntcreatefile有什么作用)
一、ntcreatefile api 失败.此项错误无法返回至应用程序 怎么解决
意思为应用程序编程接口失败,出现这个问题是因为本地api-ms-win-crt-runtime-l1-1-0.dll版本过低或者不存在,解决方法:
1、进入微软官网,找到VisualC++RedistributableforVisualStudio2015安装包,点击“下载”。
2、根据自己电脑的系统类型下载对应的安装包,32位系统下载X86,64位系统下载X64。
3、下载好安装包后,鼠标右键选择“以管理员身份运行”。
4、勾选我同意许可条款和条件,点击“安装”。
5、软件正在安装,请耐心等待。安装完成,点击“关闭”。安装完了,问题就解决了。
二、NtCreateFile错误,有遇到的吗
这个问题是怎么出现的?
我的C盘是NTFS的,装了IIS,用ACCESS数据库建了个网站,当在本地预览时,只要是有链接到数据库的页面都打不开,提示“数据库链接出错,请检查字符串!”
大多数人都认为是数据库的路径没设好,绝对路径相对路径的毛病,研究后发现,问题不在这里。
重做了C盘,格式FAT32,这个毛病就没了。
本着遇到问题解决问题,没有问题,制造问题,再解决问题的革命方针,又将C盘做回NTFS。
经过研究后发现,NTFS有个目录权限,在FAT32里没有这个。也就是说,NTFS里当IIS使用匿名帐号(通常是IUSR)时,该帐号在NT中对数据库所在的目录没有正确的权限。
开始解决问题:
首先,打开我的电脑,在上方工具栏里点“工具”菜单,选择“文件夹选项”,单击“查看”,将“使用简单文件共享”前面的勾去掉,点确定。
然后,进入C盘WINDOWS目录,在TEMP文件夹点右键,点“安全”选项,将“user”的权限全开。
好了,问题解决。
三、如何CreateFile没有盘符的分区
我觉得在XP写硬盘引导分区太危险了![:(]仔细看看msdn吧,nt下操作硬盘分区信息可以使用createfile、readfile、writefile等,与一般文件操作没有任何区别。将注册信息写进硬盘引导扇区和写进文件、注册表的作用没什么两样,真的没必要这么搞。老实说,没有人希望用这样一个软件。最起码这种做法让人担心。相关资料:procedureTForm1.Button1Click(Sender:TObject);varhDriveHandle:THandle;procedureTForm1.Button1Click(Sender:TObject);constBytesPerSector=512;SectorCount=1;//读写扇区数SectorStart=0;//起始扇区数drive='\\.\C:';//驱动盘varstr:String;p:PChar;i:Cardinal;beginhDriveHandle:=CreateFile(drive,GENERIC_ALL,FILE_SHARE_READorFILE_SHARE_WRITE,nil,OPEN_EXISTING,0,0);if(hDriveHandleINVALID_HANDLE_VALUE)thenbeginp:=allocmem(SectorCount*ByteSPerSector);//p必须是新申请的内存或全局变量,不能是局部变量//定义为局部变量是不能读写磁盘的FileSeek(hDriveHandle,SectorStart*BytesPerSector,0);//起始扇区ifFileRead(hDriveHandle,p[0],SectorCount*BytesperSector)//读扇区SectorCount*BytesperSectorthenraiseException.Create('ReadError!');str:='';fori:=0to512-1dobeginstr:=str+Format('%.2x',[integer(p[i])]);ifimod16=15thenstr:=str+#13;end;ShowMessage(str);FileSeek(hDriveHandle,SectorStart*BytesPerSector,0);//起始扇区ifFileWrite(hDriveHandle,p[0],SectorCount*BytesperSector)//写扇区SectorCount*BytesperSectorthenraiseException.Create('WriteError!');FreeMem(p,SectorCount*BytesperSector);Closehandle(hDriveHandle);end;end;procedureTForm1.Button2Click(Sender:TObject);constBytesPerSector=512;SectorCount=1;//读写扇区数SectorStart=0;//起始扇区数drive='\\.\PHYSICALDRIVE0';//物理磁盘varstr:String;p:PChar;i:Cardinal;beginhDriveHandle:=CreateFile(drive,GENERIC_ALL,FILE_SHARE_READorFILE_SHARE_WRITE,nil,OPEN_EXISTING,0,0);if(hDriveHandleINVALID_HANDLE_VALUE)thenbeginp:=allocmem(SectorCount*ByteSPerSector);//p必须是新申请的内存或全局变量,不能是局部变量//定义为局部变量是不能读写磁盘的FileSeek(hDriveHandle,SectorStart*BytesPerSector,0);//起始扇区ifFileRead(hDriveHandle,p[0],SectorCount*BytesperSector)//读扇区SectorCount*BytesperSectorthenraiseException.Create('ReadError!');str:='';fori:=0to512-1dobeginstr:=str+Format('%.2x',[integer(p[i])]);ifimod16=15thenstr:=str+#13;end;ShowMessage(str);FileSeek(hDriveHandle,SectorStart*BytesPerSector,0);//起始扇区ifFileWrite(hDriveHandle,p[0],SectorCount*BytesperSector)//写扇区SectorCount*BytesperSectorthenraiseException.Create('WriteError!');FreeMem(p,SectorCount*BytesperSector);Closehandle(hDriveHandle);end;end;