示例#1
0
IMG_UINT32 DBGDIOCDrivReadString(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer)
{
	IMG_UINT32 *				pui32OutLen;
	PDBG_IN_READSTRING	psParams;

	psParams = (PDBG_IN_READSTRING) pvInBuffer;
	pui32OutLen = (IMG_UINT32 *) pvOutBuffer;

	*pui32OutLen = ExtDBGDrivReadString(psParams->pvStream,psParams->pszString,psParams->ui32StringLen);

	return(IMG_TRUE);
}
示例#2
0
/*****************************************************************************
 FUNCTION	:	DBGDrivReadString

 PURPOSE	:

 PARAMETERS	:

 RETURNS	:
*****************************************************************************/
static IMG_UINT32 DBGDIOCDrivReadString(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer)
{
	IMG_UINT32 * pui32OutLen;
	PDBG_IN_READSTRING	psParams;
	PDBG_STREAM  psStream;
	IMG_CHAR	*pcReadBuffer;
#ifdef UNDER_WDDM
	IMG_CHAR	*pcClientBuffer;
#endif

	psParams = (PDBG_IN_READSTRING) pvInBuffer;
	pui32OutLen = (IMG_UINT32 *) pvOutBuffer;

#ifdef UNDER_WDDM
	/* WDDM DbgDriv operates at DISPATCH level so it cannot write directly
	 * to pdump.exe's userspace buffer
	 */

	pcReadBuffer = HostNonPageablePageAlloc(
			(psParams->ui32StringLen + HOST_PAGESIZE - 1) / HOST_PAGESIZE);
	pcClientBuffer = psParams->u.pszString;
#else
	pcReadBuffer = psParams->u.pszString;
#endif

	psStream = SID2PStream(psParams->hStream);
	if (psStream != (PDBG_STREAM)IMG_NULL)
	{
		*pui32OutLen = ExtDBGDrivReadString(psStream,
											pcReadBuffer, psParams->ui32StringLen);
#ifdef UNDER_WDDM
		if(*pui32OutLen > 0)
		{
			HostMemCopy(pcClientBuffer, pcReadBuffer, *pui32OutLen);
		}

		HostNonPageablePageFree(pcReadBuffer);
#endif

		return(IMG_TRUE);
	}
	else
	{
		/* invalid SID */
		*pui32OutLen = 0;
		return(IMG_FALSE);
	}
}
示例#3
0
/*****************************************************************************
 FUNCTION	:	DBGDrivReadString

 PURPOSE	:

 PARAMETERS	:

 RETURNS	:
*****************************************************************************/
static IMG_UINT32 DBGDIOCDrivReadString(IMG_VOID * pvInBuffer, IMG_VOID * pvOutBuffer)
{
	IMG_UINT32 * pui32OutLen;
	PDBG_IN_READSTRING	psParams;
	PDBG_STREAM  psStream;

	psParams = (PDBG_IN_READSTRING) pvInBuffer;
	pui32OutLen = (IMG_UINT32 *) pvOutBuffer;

	psStream = SID2PStream(psParams->hStream);
	if (psStream != (PDBG_STREAM)IMG_NULL)
	{
		*pui32OutLen = ExtDBGDrivReadString(psStream,
											psParams->u.pszString,psParams->ui32StringLen);
		return(IMG_TRUE);
	}
	else
	{
		/* invalid SID */
		*pui32OutLen = 0;
		return(IMG_FALSE);
	}
}