LastVisitedPidlMRU和LastVisitedPidlMRULegacy下二进制注册表项的内部格式是什么?

时间:2016-04-07 19:20:02

标签: windows registry

第一部分是以null结尾的Unicode中的app exe名称,这很容易。过去,路径的每个级别都包含在内,首先是非Unicode,然后是Unicode(路径根/驱动器除外,它只是非Unicode),但是由未知数据结构分隔。

我的根本问题是.Net Reportviewer控件的UI导出按钮调用公共对话框,但控件不会公开任何设置初始文件夹的方法。我想可靠地读/写这些键来管理默认的打开/保存行为。

示例注册表项转储(app是notepad.exe,路径是“C:\ Stuff \ DLTemp \ HattoriHanzo”):

  

“10”=己烷:6e中,00,6f,00,74,00,65,00,70,00,61,00,64,00,2e,00,65,00,78,00,65 ,00,00,\   00,14,00,1f,50,e0,4f,d0,20,EA,图3a,69,10,A2,d8,08,00,2b,30,30,9d,19,00,2f,43, \   图3a,图5c,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,4c,00,31,00, \   00,00,00,00,87,48,c0,8a,10,00,53,74,75,66,66,00,38,00,08,00,04,00,EF是,7B, \   44,5a,69,87,48,c0,8a,2A,00,00,00,1f,d8,01,00,00,00,CA,04,00,00,00,00,00,00, \   00,00,00,00,00,00,00,00,53,00,74,00,75,00,66,00,66,00,00,00,14,00,50,00,31, \   00,00,00,00,00,87,48,b1,95,10,00,44,4c,54,65,6d,70,00,00,3a,00,08,00,04,00, \   EF,是1C,45,60,7e,87,48,b1,95,2a,00,00,00,61,5b,02,00,00,00,62,00,00,00,00, \   00,00,00,00,00,00,00,00,00,00,00,44,00,4c,00,54,00,65,00,6d,00,70,00,00,00, \   16,00,5e,00,31,00,00,00,00,00,87,48,CA,图9A,10,00,48,41,54,54,4f,52,7e,31,00, \   00,46,00,08,00,04,00,EF,是87,48,AB,90,87,48,CA,图9A,图2a,00,00,00,E3,e3,04,00, \   00,00,0e,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,48,00,61,00,74,00,74, \   00,6f,00,72,00,69,00,48,00,61,00,6e,00,7a,00,6f,00,00,00,18,00,00,00

1 个答案:

答案 0 :(得分:1)

您可以使用SHGetPathFromIDListW Windows API调用解码剩余字节。

例如,请参阅https://svcperf.codeplex.com/SourceControl/latest#src/Viewer/UIUtils/MruFileHelper.cs处的C#实现,但该类解码OpenSavePidlMRU,它不包含可执行文件名。您可以对从LastVisitedPidlMRU获得的剩余字节执行相同的操作。