[wine] 将WindowsPath转为UnixPath的解决方案

[wine] 将WindowsPath转为UnixPath的解决方案

参考这个代码

wine-devel maling list

要在wine下实现对wpcap的兼容, 使用了wrapper的手段来进行, 即不自己实现wpcap的相应函数, 通过调用Linux下的pcap相应的函数, 达到同样的效果. 这个函数的作用是将监听到的数据dump到fname指定的文件里, 因Linux下的文件路径和Windows的不同, 想要调用LInux原生的pcap_dump_open之前需要进行路径的转换,因此尝试进行修改, 变成这个样子:

然后很干脆的跪了

Convert to Widechar 就出问题了 , 经过查看MSDN 的MultiByteToWideChar得到了相应的信息:

https://msdn.microsoft.com/en-us/library/windows/desktop/dd319072(v=vs.85).aspx 参考MSDN

cchWideChar [in]

Size, in characters, of the buffer indicated by lpWideCharStr. If this value is 0, the function returns the required buffer size, in characters, including any terminating null character, and makes no use of the lpWideCharStr buffer.

因为我的cchWideChar = 0 所以转换后的结果没有存到fname_W里, 因而转换失败

 

在IRC上请教了wine开发者之后, 选用了RtlInitAnsiString + RtlAnsiStringToUnicodeString + RtlDosPathNameToNtPathName_U + wine_nt_to_unix_file_name 的方法, 注意 一定要有 RtlDosPathNameToNtPathName_U 这个函数, 将 由前两个函数转换得到的DosPath转换为NtPath, 不然在wine_nt_to_unix_file_name的时候会出错(STATUS_OBJECT_NAME_INVALID) 不合法的NtPath, 然后经过修改的代码如下:

这个代码还有内存泄露和没有错误检查的问题, 需要继续修改,不过已经可以将winpath转换为unixpath了

发表评论

电子邮件地址不会被公开。 必填项已用*标注

3 × 2 =

This site uses Akismet to reduce spam. Learn how your comment data is processed.