嗨,我们买了一台惠普电脑与MS Windows Embedded Standard-惠普定制,我们有一个问题,在启用EWF功能。如果我尝试用EMF Manager检查EWF状态:
ewfmgr c:
我得到了错误:
“Failed getting protected volume configuration with error 1. incorrect function.”
如果我尝试使用commad启用EWF:
ewfmgr c -enable
我得到了错误:
Failed opening the target device \\.\c with error 2
The system cannot find the file specified.
我尝试使用HP实用程序- HP Write Filter Configuration来启用EWF。
但当我使用此实用程序启用EWF时,重新启动PC,EWF被禁用。
只有FBWF在工作。
有什么是不好的呢?有什么想法吗?
发布于 2011-03-09 22:06:46
在"Reg RAM“以外的模式中,EWF需要一个特殊版本的Windows引导加载程序(NTLDR)和一些未分区的磁盘空间来创建覆盖卷。我不知道您的HP PC是否已配置了这些设备。
这里列出了一些EWF系统要求:
http://msdn.microsoft.com/en-ca/library/bb499124.aspx
EWF通常在第一个引导代理(FBA)过程中创建其覆盖卷。您可以检查fbalog.txt中的错误。这里有一些重构EWF卷的说明:
http://msdn.microsoft.com/en-us/library/ms913271(WinEmbedded.5).aspx
找不到文件错误可能是由于您的第二个命令中缺少':
‘。
请尝试使用ewfmgr c: -enable
。
发布于 2019-03-13 12:58:24
我意识到这个问题很古老,但它是在我的搜索中出现的,所以我想我应该留下我的答案。
当我遇到这个错误时,是因为我使用imeagex恢复了一个镜像。在获取备份映像之前,我没有运行sysprep。我擦除并重新创建了分区,它更新了分区签名,这使EWF非常困惑,使其无法工作。
EWF没有很好的工具来配置受保护的卷。所以我写了一个。这是源码。
#define _WIN32_WINNT 0x0400
#include <windows.h>
#include <winioctl.h>
#include <tchar.h>
const TCHAR VOL_PATH[] = TEXT("SYSTEM\\CurrentControlSet\\Services\\ewf\\Parameters\\Protected\\Volume%i");
VOID Usage(){
_tprintf(TEXT("Usage: ewfvoladd <Drive Letter> <Volume Number>\n"));
}
INT _tmain(INT iArgCount, LPCTSTR pszArgVals[]){
INT iReturn = 0;
if (iArgCount == 3){
TCHAR szDrive[MAX_PATH];
_sntprintf_s(szDrive,MAX_PATH,TEXT("\\\\.\\%s:"),pszArgVals[1]);
szDrive[MAX_PATH-1] = 0;
HANDLE hPartition = CreateFile(szDrive,GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE,nullptr,OPEN_EXISTING,0,nullptr);
if (hPartition != INVALID_HANDLE_VALUE){
PARTITION_INFORMATION piPartInfo = {};
DWORD dwSize = sizeof(piPartInfo);
if (DeviceIoControl(hPartition,IOCTL_DISK_GET_PARTITION_INFO,nullptr,0,&piPartInfo,dwSize,&dwSize,nullptr)){
dwSize = sizeof(DRIVE_LAYOUT_INFORMATION) + sizeof(PARTITION_INFORMATION) * 9;
LPBYTE pbDrive = new BYTE [ dwSize ];
ZeroMemory(pbDrive,dwSize);
DRIVE_LAYOUT_INFORMATION *pdliDrive = (DRIVE_LAYOUT_INFORMATION*)pbDrive;
if (DeviceIoControl(hPartition,IOCTL_DISK_GET_DRIVE_LAYOUT,nullptr,0,pdliDrive,dwSize,&dwSize,nullptr)){
TCHAR szVol[MAX_PATH];
_sntprintf_s(szVol,MAX_PATH,VOL_PATH,(INT)_ttol(pszArgVals[2]));
szVol[MAX_PATH-1] = 0;
HKEY hVol = nullptr;
LONG lRegErr = RegCreateKeyEx(HKEY_LOCAL_MACHINE,szVol,0,nullptr,REG_OPTION_NON_VOLATILE,KEY_WRITE,nullptr,&hVol,nullptr);
if (lRegErr == ERROR_SUCCESS){
const DWORD dwZero = 0,
dwOne = 1,
dwTwo = 2;
lRegErr = RegSetValueEx(hVol,TEXT("Type"),0,REG_DWORD,(LPCBYTE)&dwTwo,sizeof(dwTwo));
if (lRegErr != ERROR_SUCCESS){
iReturn = (INT)lRegErr;
_tprintf(TEXT("Failed to set Type: %i\n"),iReturn);
}
lRegErr = RegSetValueEx(hVol,TEXT("Enabled"),0,REG_DWORD,(LPCBYTE)&dwZero,sizeof(dwZero));
if (lRegErr != ERROR_SUCCESS){
iReturn = (INT)lRegErr;
_tprintf(TEXT("Failed to set Enabled: %i\n"),iReturn);
}
lRegErr = RegSetValueEx(hVol,TEXT("CompareBeforeAlloc"),0,REG_DWORD,(LPCBYTE)&dwOne,sizeof(dwOne));
if (lRegErr != ERROR_SUCCESS){
iReturn = (INT)lRegErr;
_tprintf(TEXT("Failed to set CompareBeforeAlloc: %i\n"),iReturn);
}
lRegErr = RegSetValueEx(hVol,TEXT("DiskSignature"),0,REG_DWORD,(LPCBYTE)&pdliDrive->Signature,sizeof(pdliDrive->Signature));
if (lRegErr != ERROR_SUCCESS){
iReturn = (INT)lRegErr;
_tprintf(TEXT("Failed to set DiskSignature: %i\n"),iReturn);
}
lRegErr = RegSetValueEx(hVol,TEXT("PartitionOffset"),0,REG_QWORD,(LPCBYTE)&piPartInfo.StartingOffset.QuadPart,sizeof(piPartInfo.StartingOffset.QuadPart));
if (lRegErr != ERROR_SUCCESS){
iReturn = (INT)lRegErr;
_tprintf(TEXT("Failed to set PartitionOffset: %i\n"),iReturn);
}
RegCloseKey(hVol);
}else{
iReturn = (INT)lRegErr;
_tprintf(TEXT("Failed to open registry key (%s): %i\n"),szVol,iReturn);
}
}else{
iReturn = (INT)GetLastError();
_tprintf(TEXT("Failed to get disk info: %i\n"),iReturn);
}
delete [] pbDrive;
}else{
iReturn = (INT)GetLastError();
_tprintf(TEXT("Failed to get partition info: %i\n"),iReturn);
}
CloseHandle(hPartition);
}else{
iReturn = (INT)GetLastError();
_tprintf(TEXT("Failed to open drive: %i\n"),iReturn);
}
}else{
iReturn = ERROR_INVALID_PARAMETER;
Usage();
_tprintf(TEXT("\nNot enough parameters\n"));
}
return iReturn;
}
因此,如果您只有一个分区,并且它是C:驱动器,那么您可以运行以下命令并重新启动。
ewfvoladd c 0
然后,您应该能够像这样启用EWF
ewfmgr c: -enable
再重启一次,就完成了。
https://stackoverflow.com/questions/5245586
复制相似问题