- 积分
- 1158
- 最后登录
- 2018-7-12
- 精华
- 0
- 阅读权限
- 40
- 主题
- 105
- UID
- 2512723
- 帖子
- 2894
- PB币
- 9010
- 威望
- 0
- 贡献
- 0
- 技术
- 307
- 活跃
- 2377
- UID
- 2512723
- 帖子
- 2894
- PB币
- 9010
- 贡献
- 0
- 技术
- 307
- 活跃
- 2377
|
本帖最后由 zifeityzyicq 于 2016-5-12 23:09 编辑
首先你需要有Dism++ SDK,这个你可以在论坛此贴中下载Dism++程序,解压后里面就有Dism++ SDK
- https://bbs.pcbeta.com/viewthread-1672219-1-1.html
复制代码
SDK中有4个文件
Dism++API.h - Dism++的核心API,就可以使用Dism++实现的接口完成你的操作。
Plugin.h - Dism++插件相关API,实现这些接口可以整合至Dism++中
Dism++x64.lib - amd64的Dism++ API 动态导入库
Dism++x86.lib - x86的Dism++ API 动态导入库
======================================================================
OK 好戏开始啦,我们先介绍一个简单的API ESD解密与ESD转ISO。
ESD转ISO功能分析:
1:微软的esd是加密的,使用前必须解密 SO,我们在转换ISO时很可能需要解密,这个Dism++ API中的DismDecryptWimFile API可以完成此操作。。
其原型声明如下(在Dism++api.h中):
/*解密加密的ESD文件
FilePath:需要解密的esd文件路径
PublicKey:esd解密密钥,用Base64编码表示,如果为NULL,仅检查文件是否被加密
TestKey:是否仅仅是测试解密密钥能否解密,如果为TRUE,那么仅测试Key能否解密,不执行实际解密工作。如果为FALSE那么执行解密工作
返回值说明
ERROR_INVALID_FUNCTION:文件已经解密,无需宅进行解密
1216:输入的解密Key无法解密此文件
S_OK: 操作完成*/
HRESULT WINAPI DismDecryptWimFile(LPCWSTR FilePath, LPCWSTR PublicKey, BOOL TestKey/* 如果为TRUE 那么仅测试Key能否解密此文件*/);
2:esd解密完成后 还需要转换为ISO,这时可以调用 DismConversionESD2ISO API。此API生成的ISO直接就是双启动ISO。无需担心,UEFI计算机无法启动问题。
函数声明如下:
/*将一个esd文件转换为ISO文件
szWimFilePath:ESD文件路径
szISOPath:需要生成的ISO路径,如果文件存在则覆盖
CompressTpye:生成ISO中的install.wim文件的压缩等级
CallBack:可选参考,Dism++的消息回调,Dism++会使用回掉来通知你工作进度,等信息
UserData:可选参数,Dism++在调用回调时 给你传入的UserData
返回值:
S_OK:操作成功
0xA0020001:仅支持微软在线提供的ESD文件转换为ISO文件。*/
HRESULT WINAPI DismConversionESD2ISO(LPCWSTR szWimFilePath, LPCWSTR szISOPath, DismCompressTpye CompressTpye, DismCallBack CallBack, LPVOID UserData);
在稍微整理下核心代码,主要逻辑如下:
1:判断用户输入的esd是否被加密,如果被加密那么执行动作2,否则执行动作3
2:对esd执行解密动作。
3:对esd执行转ISO操作。
auto hr=DismDecryptWimFile(L"D:\\测试\\Test.esd",NULL,TRUE);
if(hr==ERROR_INVALID_FUNCTION)
{
//文件未被加密,不做任何事情
}
else if(hr==S_OK)
{
//文件被加密,执行解密,如果你不确定你的Key能否解密,吧TestKey设置为TRUE,仅探测Key能否解密ESD
hr=DismDecryptWimFile(L"D:\\测试\\Test.esd",L"这里写上esd解密Key",FALSE);
if(hr)
{
//执行解密出错
}
}
else
{
//函数执行错误
}
//在D:\测试\Windows 10.iso生成一个映像(最大压缩的install.wim),并且不接受回调信息
hr=DismConversionESD2ISO((L"D:\\测试\\Test.esd",L"D:\\测试\\Windows 10.iso",Compress_LZX,NULL,NULL);
大概逻辑就是如此,明天再继续写……
|
-
5
查看全部评分
-
|