2014-01-10 74 views
0

我想調用LsaICryptUnprotectData但我得到錯誤代碼87不支持的參數。有沒有人能夠成功調用這個功能?想看看一個例子函數調用參數爲LsaICryptUnprotectData

這裏是我如何打電話,

typedef int (WINAPI *LPFUN_LSAICRYPTUNPROTECTDATA) 
(
    LPBYTE encCredData, 
    DWORD encCredDataSize, 
    DWORD reserved1, 
    DWORD reserved2, 
    DWORD reserved3, 
    DWORD reserved4, 
    DWORD dwFlags, 
    DWORD reserved5, 
    LPBYTE *decCredData, 
    LPDWORD decCredDataSize 
); 

LPFUN_LSAICRYPTUNPROTECTDATA pLsaICryptUnprotectData = (LPFUN_LSAICRYPTUNPROTECTDATA) GetProcAddress (hLsasrv, "LsaICryptUnprotectData"); 
    if(!pLsaICryptUnprotectData) 
    {return GetLastError();} 

HANDLE credfile = NULL; 
LPBYTE buffer = NULL; 
LPBYTE pDecrypted = NULL; 
DWORD dwSize = 0; 
DWORD cbsize=0; 

credfile = CreateFile(filename,GENERIC_READ,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM,NULL); 


dwSize = GetFileSize(credfile,NULL);  
buffer=(LPBYTE)malloc(dwSize); 
SetFilePointer(credfile,0,0,FILE_BEGIN); 
DWORD credFileSize=0; 
ReadFile(credfile,buffer,dwSize,&credFileSize,NULL) 

if(!pLsaICryptUnprotectData(buffer, dwSize, 0,0,0,0, 0, 0, &pDecrypted, &cbsize) != NULL)) 
{ 
// do error handling 
} 
+0

展一些代碼請 – Praind

+0

@Johny我已經添加了我的測試工具。基本上在調用pLsaICryptUnprotectData後,我得到錯誤代碼87(參數不支持)字節讀取(cbsize)也是0. – Syler

回答

0

LsalCryptUnprotectData功能是未記錄,但this example,你可能有類似的參數嘗試:

cbSize = 0; 
pLsaICryptUnprotectData (buffer, dwSize, 0,0,0,0, 0x20000041, 0, 
    &pDecrypted, &cbSize); 
+0

我正在使用!但我仍然得到錯誤代碼87.緩衝區必須被傳入之前malloc'ed? – Syler

+0

@Syler在我見過的例子中,輸出緩衝區*是先分配的。你當然可以嘗試這兩種方式,但要確保你不誤解錯誤 - 由於函數被記錄,你甚至不知道它成功時是否返回「TRUE」或「FALSE」。即使'cbSize'爲零,你是否能得到任何數據? –