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.
118 lines
3.4 KiB
118 lines
3.4 KiB
//--------------------------------------------------------------------
|
|
// utils - implementation
|
|
// Copyright (C) Microsoft Corporation, 2001
|
|
//
|
|
// Created by: Duncan Bryce (duncanb), 11-11-2001
|
|
//
|
|
// Various utility functions
|
|
|
|
|
|
#include "pch.h"
|
|
|
|
//--------------------------------------------------------------------------------
|
|
//
|
|
// File Manipulation Utility Functions
|
|
//
|
|
//--------------------------------------------------------------------------------
|
|
|
|
//---------------------------------------------------------------------------------
|
|
HRESULT MyMapFile(LPWSTR wszFileName, LPBYTE *ppbFile, DWORD *pcbFile)
|
|
{
|
|
BYTE *pbFile = NULL;
|
|
HANDLE hFile = NULL;
|
|
HRESULT hr;
|
|
HANDLE hFileMapping = NULL;
|
|
LARGE_INTEGER liFileSize;
|
|
|
|
hFile = CreateFile(wszFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
if (INVALID_HANDLE_VALUE == hFile) {
|
|
_JumpLastError(hr, error, "CreateFile");
|
|
}
|
|
|
|
if (!GetFileSizeEx(hFile, &liFileSize)) {
|
|
_JumpLastError(hr, error, "GetFileSizeEx");
|
|
}
|
|
|
|
if (0 != liFileSize.HighPart) {
|
|
hr = HRESULT_FROM_WIN32(ERROR_NO_SYSTEM_RESOURCES);
|
|
_JumpError(hr, error, "MyMapFile: file too large");
|
|
}
|
|
|
|
hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
|
|
if (NULL == hFileMapping) {
|
|
_JumpLastError(hr, error, "CreateFileMapping");
|
|
}
|
|
|
|
pbFile = (BYTE *)MapViewOfFile(hFileMapping, FILE_MAP_READ, 0, 0, liFileSize.LowPart);
|
|
if (NULL == pbFile) {
|
|
_JumpLastError(hr, error, "MapViewOfFile");
|
|
}
|
|
|
|
// Success! Assign out params:
|
|
*ppbFile = pbFile;
|
|
*pcbFile = liFileSize.LowPart;
|
|
hr = S_OK;
|
|
error:
|
|
if(hFile) {
|
|
CloseHandle(hFile);
|
|
}
|
|
if(hFileMapping) {
|
|
CloseHandle(hFileMapping);
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
|
|
//---------------------------------------------------------------------------------
|
|
HRESULT MyUnmapFile(LPCVOID pvBaseAddress) {
|
|
HRESULT hr;
|
|
|
|
if (!UnmapViewOfFile(pvBaseAddress)) {
|
|
_JumpLastError(hr, error, "UnmapViewOfFile");
|
|
}
|
|
|
|
hr = S_OK;
|
|
error:
|
|
return hr;
|
|
}
|
|
|
|
|
|
//--------------------------------------------------------------------------------
|
|
//
|
|
// String Manipulation Utility Functions
|
|
//
|
|
//--------------------------------------------------------------------------------
|
|
|
|
|
|
//--------------------------------------------------------------------------
|
|
void InitKeysvcUnicodeString(PKEYSVC_UNICODE_STRING pUnicodeString, LPCWSTR wszString) {
|
|
pUnicodeString->Length = wcslen(wszString) * sizeof(WCHAR);
|
|
pUnicodeString->MaximumLength = pUnicodeString->Length + sizeof(WCHAR);
|
|
pUnicodeString->Buffer = (USHORT *)wszString;
|
|
}
|
|
|
|
//--------------------------------------------------------------------------
|
|
LPSTR MBFromWide(LPCWSTR wsz) {
|
|
LPSTR sz = NULL;
|
|
DWORD cb = 0;
|
|
|
|
_MyAssert(NULL != wsz);
|
|
if(NULL == wsz) {
|
|
SetLastError(ERROR_INVALID_PARAMETER);
|
|
return(NULL);
|
|
}
|
|
|
|
if( (cb = WideCharToMultiByte(0, 0, wsz, -1, NULL, 0, NULL, NULL)) == 0 ||
|
|
(sz = (char *) LocalAlloc(LPTR, cb)) == NULL ||
|
|
(cb = WideCharToMultiByte(0, 0, wsz, -1, sz, cb, NULL, NULL)) == 0 ) {
|
|
|
|
if(GetLastError() == ERROR_SUCCESS)
|
|
SetLastError(ERROR_OUTOFMEMORY);
|
|
|
|
return(NULL);
|
|
}
|
|
|
|
return(sz);
|
|
}
|
|
|
|
|