C 在使用ZwOpenFile时出错

C 在使用ZwOpenFile时出错,c,api,winapi,file,file-io,C,Api,Winapi,File,File Io,我必须使用ZwOpenFile API打开一个文件。这是我的要求。在对象名称参数中设置路径时。我可以在对象名称中看到字段Length和maximumlength 长度就是路径的长度,我通常将maximumlength作为长度的值 它主要起作用,但有时不起作用。在某些情况下,我通过maximumlength=length*2解决了这个问题。即使是这种计算也不适用于少数其他情况 我对最大长度值的计算非常困惑 有人能帮忙吗。最初我用/??/手动转换了ntpath名称。这是没有解决的 然后我用RTL_d

我必须使用ZwOpenFile API打开一个文件。这是我的要求。在对象名称参数中设置路径时。我可以在对象名称中看到字段Length和maximumlength

长度就是路径的长度,我通常将maximumlength作为长度的值

它主要起作用,但有时不起作用。在某些情况下,我通过maximumlength=length*2解决了这个问题。即使是这种计算也不适用于少数其他情况

我对最大长度值的计算非常困惑


有人能帮忙吗。

最初我用/??/手动转换了ntpath名称。这是没有解决的

然后我用RTL_dospathnametontpathname_进行了尝试,结果得到了一个unicode字符串。 然后我的案子就成功了。 另外,通常情况下,RTLinitOniToDestroying api也会被用于初始化 建议


谢谢。

查看UNICODE\u字符串结构定义:

长度为wcslenstr.Buffer*sizeofWCHAR===2

MaximumLength字段可以是Length+sizeofWCHAR==Length+2


ZwOpenFile不会写入此字符串,因此我们不应该关心字符串的容量。

是否使用RtlInitUnicodeString初始化字符串?我正在更改传入的文件路径。因此,长度发生了变化。我以前是通过RTLUNICODestringtheRite方法计算的。但它在上下文上并不相同。然后通过wine代码,我发现编辑文件路径名后,必须将其转换为ntfilepathname/??/。为此,我们必须使用RTL_dospathnametontpathname_。自动为我们提供unicode字符串。这种转换成功了。为了您的利益,您为什么要使用ZwOpenFile?它提供了哪些CreateFile不提供的功能?请发布您的失败代码-确定问题是猜测而不是itLarry,我在zwopenfile的传入路径中附加了一个虚拟路径。因此,我必须编辑其中的object属性,在zwopenfile的传入路径中附加一个虚拟路径。因此,我必须编辑其中的对象属性。但是,您显示的计算将起作用。谢谢你的钩状zwopenfile。因此,我将在实现内部,根据需要编辑其参数。