Leaked source code of windows server 2003
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.
 
 
 
 
 
 

122 lines
2.6 KiB

/*++
Copyright (C) 2000-2001 Microsoft Corporation
--*/
#include "precomp.h"
#include <wbemcomn.h>
#include <statsync.h>
#include "a51tools.h"
__int64 g_nCurrentTime = 1;
__int64 g_nReadFailures = 0;
__int64 g_nWriteFailures = 0;
//
// FILE_ATTRIBUTE_NOT_CONTENT_INDEXED is not actually supported on CreateFile,
// contrary to the docs. However, also contrary to the docs, it is inherited
// from the parent directory
//
#define A51_FILE_CREATION_FLAGS 0 //FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
CTempMemoryManager g_Manager;
void* TempAlloc(DWORD dwLen)
{
return g_Manager.Allocate(dwLen);
}
void TempFree(void* p, DWORD dwLen)
{
g_Manager.Free(p, dwLen);
}
void* TempAlloc(CTempMemoryManager& Manager, DWORD dwLen)
{
return Manager.Allocate(dwLen);
}
void TempFree(CTempMemoryManager& Manager, void* p, DWORD dwLen)
{
Manager.Free(p, dwLen);
}
HRESULT A51TranslateErrorCode(long lRes)
{
if (lRes == ERROR_SUCCESS)
return WBEM_S_NO_ERROR;
switch(lRes)
{
case ERROR_FILE_NOT_FOUND:
return WBEM_E_NOT_FOUND;
case ERROR_OUTOFMEMORY:
case ERROR_NOT_ENOUGH_MEMORY:
return WBEM_E_OUT_OF_MEMORY;
case ERROR_NOT_ENOUGH_QUOTA:
case ERROR_DISK_FULL:
return WBEM_E_OUT_OF_DISK_SPACE;
case ERROR_SERVER_SHUTDOWN_IN_PROGRESS:
return WBEM_E_SHUTTING_DOWN;
default:
return WBEM_E_FAILED;
}
}
long __stdcall EnsureDirectory(LPCWSTR wszPath, LPSECURITY_ATTRIBUTES pSA)
{
if(!CreateDirectoryW(wszPath, NULL))
{
long lRes = GetLastError();
if(lRes != ERROR_ALREADY_EXISTS)
return lRes;
else
return ERROR_SUCCESS;
}
else
return ERROR_SUCCESS;
}
static WCHAR g_HexDigit[] =
{ L'0', L'1', L'2', L'3', L'4', L'5', L'6', L'7', L'8', L'9',
L'A', L'B', L'C', L'D', L'E', L'F'
};
bool A51Hash(LPCWSTR wszName, LPWSTR wszHash)
{
//
// Have to upper-case everything
//
DWORD dwBufferSize = wcslen(wszName)*2+2;
LPWSTR wszBuffer = (WCHAR*)TempAlloc(dwBufferSize);
if (wszBuffer == NULL)
return false;
CTempFreeMe vdm(wszBuffer, dwBufferSize);
wbem_wcsupr(wszBuffer, wszName);
BYTE RawHash[16];
MD5::Transform((void*)wszBuffer, wcslen(wszBuffer)*2, RawHash);
WCHAR* pwc = wszHash;
for(int i = 0; i < 16; i++)
{
*(pwc++) = g_HexDigit[RawHash[i]/16];
*(pwc++) = g_HexDigit[RawHash[i]%16];
}
*pwc = 0;
return true;
}