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.
 
 
 
 
 
 

181 lines
4.0 KiB

/* File: D:\WACKER\tdll\load_res.c (Created: 16-Dec-1993)
*
* Copyright 1994 by Hilgraeve Inc. -- Monroe, MI
* All rights reserved
*
* $Revision: 7 $
* $Date: 4/12/02 4:59p $
*/
#include <windows.h>
#pragma hdrstop
#include "stdtyp.h"
#include "session.h"
#include "assert.h"
#include "tdll.h"
#include "htchar.h"
#include "load_res.h"
#if defined(DEADWOOD)
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* FUNCTION:
* resLoadDataBlock
*
* DESCRIPTION:
* This function is used to get a block of data stored in the resource file
* as an RCDATA item. Note that in WIN32, it is not necessary to free the
* resource after it has been locked.
*
* PARAMETERS:
* hSession -- the session handle
* pszName -- the id for the data block
* ppData -- where to put the pointer to the data block
* pSize -- addres of integer for size value
*
* RETURNS: 0 if successful, otherwise a defined error value.
*
* The size of the resource that has been loaded (in bytes).
* NOTE: The return value may be (and often is) larger than the actual
* size of the resource as it is defined in the rc file. For resources
* of type RCDATA, the resource definition itself should include either a
* delimiter, or a count of the number of items included in that resource.
* See also RCDATA_TYPE in stdtype.h
*/
INT_PTR resLoadDataBlock(const HINSTANCE hInst,
const int id,
const void **ppData,
DWORD *pSize)
{
HGLOBAL hG = NULL;
HRSRC hR = NULL;
LPVOID pV = NULL;
DWORD nSize = 0;
if(pSize)
{
*pSize = nSize;
}
hR = FindResource(hInst, MAKEINTRESOURCE(id), (LPCTSTR)RT_RCDATA);
if (hR == NULL)
{
assert(FALSE);
return LDR_BAD_ID;
}
hG = LoadResource(hInst, hR);
if (hG == NULL)
{
assert(FALSE);
return LDR_NO_RES;
}
nSize = SizeofResource(hInst, hR);
if (nSize == 0)
{
assert(FALSE);
return LDR_NO_RES;
}
if(pSize)
{
*pSize = nSize;
}
pV = LockResource(hG);
if (pV == 0)
{
assert(FALSE);
return LDR_NO_RES;
}
if (ppData == NULL)
{
assert(FALSE);
return LDR_BAD_PTR;
}
*ppData = pV;
return 0;
}
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* FUNCTION:
* resFreeDataBlock
*
* DESCRIPTION:
* This function is not necessary for WIN32.
*
* PARAMETERS:
* hSession -- the session handle
* pData -- pointer to the data block
*
* RETURNS:
* ZERO if everything is OK, otherwise an error code.
*/
INT_PTR resFreeDataBlock(const HSESSION hSession,
const void *pData)
{
return 0;
}
#endif // defined(DEADWOOD)
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
* FUNCTION:
* resLoadFileMask
*
* DESCRIPTION:
* This function is used to get around a problem that exists in loading
* strings into the common file dialogs. The file name masks are two strings
* that are NULL separated. This internal NULL is not treated with any
* respect by the resource functions, so we split them up and do a two part
* load to rebuild the string.
*
* PARAMETERS:
* hInst -- the instance handle to use
* uId -- the ID of the first resource to load
* nCount -- the number of string PAIRS to load, starting a uId
* pszBuffer -- where to put the strings
* nSize -- the size of the buffer in characters
*
* RETURNS:
* Zero if everything is OK, otherwise (-1)
*/
INT_PTR resLoadFileMask(HINSTANCE hInst,
UINT uId,
int nCount,
LPTSTR pszBuffer,
int nSize)
{
int i;
LPTSTR pszEnd;
LPTSTR pszPtr;
if (pszBuffer == 0 || nSize == 0)
{
assert(0);
return -1;
}
TCHAR_Fill(pszBuffer, TEXT('\0'), nSize);
pszPtr = pszBuffer;
pszEnd = pszBuffer + nSize;
for (nCount *= 2 ; nCount > 0 ; --nCount)
{
i = LoadString(hInst, uId++, pszPtr, (int)(pszEnd - pszPtr - 1));
pszPtr += (unsigned)i + sizeof(TCHAR);
if (pszPtr >= pszEnd)
{
assert(0);
return -1;
}
}
return 0;
}