91 lines
2.3 KiB
C
91 lines
2.3 KiB
C
/*++
|
|
|
|
Copyright (c) 2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
misc.c
|
|
|
|
Abstract: Miscellaneous functions.
|
|
|
|
Environment:
|
|
|
|
Kernel mode
|
|
|
|
Author:
|
|
|
|
Michael Tsang (MikeTs) 13-Apr-2000
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "pch.h"
|
|
|
|
#ifdef ALLOC_PRAGMA
|
|
#pragma alloc_text(PAGE, RtlUnpackPartialDesc)
|
|
#endif //ifdef ALLOC_PRAGMA
|
|
|
|
/*****************************************************************************
|
|
*
|
|
* @doc EXTERNAL
|
|
*
|
|
* @func PCM_PARTIAL_RESOURCE_DESCRIPTOR | RtlUnpackPartialDesc |
|
|
* Pulls out a pointer to the partial descriptor you are interested
|
|
* in.
|
|
*
|
|
* @parm IN UCHAR | ResType | Specifies the resource type we are interested
|
|
* in.
|
|
* @parm IN PCM_RESOURCE_LIST | ResList | Points to the resource list to
|
|
* search.
|
|
* @parm IN OUT PULONG | Count | Points to the index of the partial
|
|
* descriptor you are looking for, gets incremented if found.
|
|
* i.e. starts with *Count = 0, then subsequent calls will find the
|
|
* next partial descriptor.
|
|
*
|
|
* @rvalue SUCCESS | returns pointer to the partial descriptor found.
|
|
* @rvalue FAILURE | returns NULL.
|
|
*
|
|
*****************************************************************************/
|
|
|
|
PCM_PARTIAL_RESOURCE_DESCRIPTOR INTERNAL
|
|
RtlUnpackPartialDesc(
|
|
IN UCHAR ResType,
|
|
IN PCM_RESOURCE_LIST ResList,
|
|
IN OUT PULONG Count
|
|
)
|
|
{
|
|
PROCNAME("RtlUnpackPartialDesc")
|
|
ULONG i, j, hit = 0;
|
|
|
|
PAGED_CODE();
|
|
|
|
ENTER(2, ("(ResType=%x,ResList=%p,Count=%d)\n", ResType, ResList, *Count));
|
|
|
|
for (i = 0; i < ResList->Count; ++i)
|
|
{
|
|
for (j = 0; j < ResList->List[i].PartialResourceList.Count; ++j)
|
|
{
|
|
if (ResList->List[i].PartialResourceList.PartialDescriptors[j].Type
|
|
== ResType)
|
|
{
|
|
if (hit == *Count)
|
|
{
|
|
(*Count)++;
|
|
EXIT(2, ("=%p (Count=%d)\n",
|
|
&ResList->List[i].PartialResourceList.PartialDescriptors[j],
|
|
*Count));
|
|
return &ResList->List[i].PartialResourceList.PartialDescriptors[j];
|
|
}
|
|
else
|
|
{
|
|
hit++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
EXIT(2, ("=NULL (Count=%d)\n", *Count));
|
|
return NULL;
|
|
} //RtlUnpackPartialDesc
|