You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
301 lines
5.2 KiB
301 lines
5.2 KiB
// StorageGlobal.cpp : Implementation of CStorageGlobal
|
|
#include "stdafx.h"
|
|
#include "mswmdm.h"
|
|
#include "StorageGlobal.h"
|
|
#include "Device.h"
|
|
#include "Storage.h"
|
|
#include "loghelp.h"
|
|
#include "scserver.h"
|
|
#include "scclient.h"
|
|
#include "spinfo.h"
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CWMDMStorageGlobal
|
|
|
|
extern CSecureChannelServer *g_pAppSCServer;
|
|
extern CSPInfo **g_pSPs;
|
|
|
|
// IWMDMStorageGlobals
|
|
HRESULT CWMDMStorageGlobal::GetTotalSize(DWORD *pdwTotalSizeLow, DWORD *pdwTotalSizeHigh)
|
|
{
|
|
HRESULT hr;
|
|
|
|
if (g_pAppSCServer)
|
|
{
|
|
if(!g_pAppSCServer->fIsAuthenticated())
|
|
{
|
|
hr = WMDM_E_NOTCERTIFIED;
|
|
goto exit;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
hr = E_FAIL;
|
|
goto exit;
|
|
}
|
|
|
|
hr = m_pStgGlobals->GetTotalSize(pdwTotalSizeLow, pdwTotalSizeHigh);
|
|
if (FAILED(hr))
|
|
{
|
|
goto exit;
|
|
}
|
|
|
|
exit:
|
|
hrLogDWORD("IWMDMStorageGlobals::GetTotalSize returned 0x%08lx", hr, hr);
|
|
|
|
return hr;
|
|
|
|
}
|
|
|
|
HRESULT CWMDMStorageGlobal::GetCapabilities(DWORD *pdwCapabilities)
|
|
{
|
|
HRESULT hr;
|
|
|
|
if (g_pAppSCServer)
|
|
{
|
|
if(!g_pAppSCServer->fIsAuthenticated())
|
|
{
|
|
hr = WMDM_E_NOTCERTIFIED;
|
|
goto exit;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
hr = E_FAIL;
|
|
goto exit;
|
|
}
|
|
|
|
hr = m_pStgGlobals->GetCapabilities(pdwCapabilities);
|
|
if (FAILED(hr))
|
|
{
|
|
goto exit;
|
|
}
|
|
|
|
exit:
|
|
hrLogDWORD("IWMDMStorageGlobals::GetCapabilities returned 0x%08lx", hr, hr);
|
|
|
|
return hr;
|
|
}
|
|
|
|
HRESULT CWMDMStorageGlobal::GetSerialNumber(PWMDMID pSerialNum, BYTE abMac[WMDM_MAC_LENGTH])
|
|
{
|
|
HRESULT hr;
|
|
HMAC hMAC;
|
|
CSecureChannelClient *pSCClient;
|
|
BYTE abTempMAC[SAC_MAC_LEN];
|
|
BYTE abMACVerify[SAC_MAC_LEN];
|
|
|
|
if (g_pAppSCServer)
|
|
{
|
|
if(!g_pAppSCServer->fIsAuthenticated())
|
|
{
|
|
hr = WMDM_E_NOTCERTIFIED;
|
|
goto exit;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
hr = E_FAIL;
|
|
goto exit;
|
|
}
|
|
|
|
if (!pSerialNum)
|
|
{
|
|
hr = E_INVALIDARG;
|
|
goto exit;
|
|
}
|
|
|
|
g_pSPs[m_wSPIndex]->GetSCClient(&pSCClient);
|
|
if (!pSCClient)
|
|
{
|
|
hr = E_FAIL;
|
|
goto exit;
|
|
}
|
|
|
|
hr = m_pStgGlobals->GetSerialNumber(pSerialNum, abTempMAC);
|
|
if (FAILED(hr))
|
|
{
|
|
goto exit;
|
|
}
|
|
|
|
// Verify the MAC from SP
|
|
hr = pSCClient->MACInit(&hMAC);
|
|
if (FAILED(hr))
|
|
{
|
|
goto exit;
|
|
}
|
|
|
|
hr = pSCClient->MACUpdate(hMAC, (BYTE*)(pSerialNum), sizeof(WMDMID));
|
|
if (FAILED(hr))
|
|
{
|
|
goto exit;
|
|
}
|
|
|
|
hr = pSCClient->MACFinal(hMAC, abMACVerify);
|
|
if (FAILED(hr))
|
|
{
|
|
goto exit;
|
|
}
|
|
|
|
if (memcmp(abMACVerify, abTempMAC, WMDM_MAC_LENGTH) != 0)
|
|
{
|
|
hr = WMDM_E_MAC_CHECK_FAILED;
|
|
goto exit;
|
|
}
|
|
|
|
// Compute the MAC to send back to the application
|
|
hr = g_pAppSCServer->MACInit(&hMAC);
|
|
if (FAILED(hr))
|
|
{
|
|
goto exit;
|
|
}
|
|
|
|
hr = g_pAppSCServer->MACUpdate(hMAC, (BYTE*)(pSerialNum), sizeof(WMDMID));
|
|
if (FAILED(hr))
|
|
{
|
|
goto exit;
|
|
}
|
|
|
|
hr = g_pAppSCServer->MACFinal(hMAC, abMac);
|
|
if (FAILED(hr))
|
|
{
|
|
goto exit;
|
|
}
|
|
|
|
exit:
|
|
|
|
hrLogDWORD("IWMDMStorageGlobals::GetSerialNumber returned 0x%08lx", hr, hr);
|
|
|
|
return hr;
|
|
}
|
|
|
|
HRESULT CWMDMStorageGlobal::GetTotalFree(DWORD *pdwFreeLow,
|
|
DWORD *pdwFreeHigh)
|
|
{
|
|
HRESULT hr;
|
|
|
|
if (g_pAppSCServer)
|
|
{
|
|
if(!g_pAppSCServer->fIsAuthenticated())
|
|
{
|
|
hr = WMDM_E_NOTCERTIFIED;
|
|
goto exit;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
hr = E_FAIL;
|
|
goto exit;
|
|
}
|
|
|
|
hr = m_pStgGlobals->GetTotalFree(pdwFreeLow, pdwFreeHigh);
|
|
if (FAILED(hr))
|
|
{
|
|
goto exit;
|
|
}
|
|
|
|
exit:
|
|
hrLogDWORD("IWMDMStorageGlobals::GetTotalFree returned 0x%08lx", hr, hr);
|
|
|
|
return hr;
|
|
}
|
|
|
|
HRESULT CWMDMStorageGlobal::GetTotalBad(DWORD *pdwBadLow,
|
|
DWORD *pdwBadHigh)
|
|
{
|
|
HRESULT hr;
|
|
|
|
if (g_pAppSCServer)
|
|
{
|
|
if(!g_pAppSCServer->fIsAuthenticated())
|
|
{
|
|
hr = WMDM_E_NOTCERTIFIED;
|
|
goto exit;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
hr = E_FAIL;
|
|
goto exit;
|
|
}
|
|
|
|
hr = m_pStgGlobals->GetTotalBad(pdwBadLow, pdwBadHigh);
|
|
if (FAILED(hr))
|
|
{
|
|
goto exit;
|
|
}
|
|
|
|
exit:
|
|
hrLogDWORD("IWMDMStorageGlobals::GetTotalBad returned 0x%08lx", hr, hr);
|
|
|
|
return hr;
|
|
}
|
|
|
|
HRESULT CWMDMStorageGlobal::GetStatus(DWORD *pdwStatus)
|
|
{
|
|
HRESULT hr;
|
|
|
|
if (g_pAppSCServer)
|
|
{
|
|
if(!g_pAppSCServer->fIsAuthenticated())
|
|
{
|
|
hr = WMDM_E_NOTCERTIFIED;
|
|
goto exit;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
hr = E_FAIL;
|
|
goto exit;
|
|
}
|
|
|
|
hr = m_pStgGlobals->GetStatus(pdwStatus);
|
|
if (FAILED(hr))
|
|
{
|
|
goto exit;
|
|
}
|
|
|
|
exit:
|
|
hrLogDWORD("IWMDMStorageGlobals::GetStatus returned 0x%08lx", hr, hr);
|
|
|
|
return hr;
|
|
}
|
|
|
|
HRESULT CWMDMStorageGlobal::Initialize(UINT fuMode,
|
|
IWMDMProgress *pProgress)
|
|
{
|
|
HRESULT hr;
|
|
|
|
if (g_pAppSCServer)
|
|
{
|
|
if(!g_pAppSCServer->fIsAuthenticated())
|
|
{
|
|
hr = WMDM_E_NOTCERTIFIED;
|
|
goto exit;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
hr = E_FAIL;
|
|
goto exit;
|
|
}
|
|
|
|
hr = m_pStgGlobals->Initialize(fuMode, pProgress);
|
|
if (FAILED(hr))
|
|
{
|
|
goto exit;
|
|
}
|
|
|
|
exit:
|
|
hrLogDWORD("IWMDMStorageGlobals::Initialize returned 0x%08lx", hr, hr);
|
|
|
|
return hr;
|
|
}
|
|
|
|
void CWMDMStorageGlobal::SetContainedPointer(IMDSPStorageGlobals *pStgGlobals, WORD wSPIndex)
|
|
{
|
|
m_pStgGlobals = pStgGlobals;
|
|
m_pStgGlobals->AddRef();
|
|
m_wSPIndex = wSPIndex;
|
|
return;
|
|
}
|