?? list.cpp
字號:
#include "FsTPM.h"
BOOL ProtectList_Is_In(PTLIST pList, WCHAR* WideSource, PFILE_PROTECT_LIST_ITEM *ppItem)
{
ULONG i;
ExAcquireFastMutex( &pList->mutex );
for (i=0; i< pList->Count; i++)
{
if ( wcscmp(WideSource, pList->head[i]->ProtectedFileName)==0 )
{
*ppItem = pList->head[i];
ExReleaseFastMutex( &(pList->mutex) );
return TRUE;
}
}
ExReleaseFastMutex( &(pList->mutex) );
*ppItem=NULL;
return FALSE;
}
NTSTATUS CreateList( IN PTLIST pList,IN ULONG MaxNum )
{
pList->head = NULL;
NTSTATUS RC = STATUS_SUCCESS;
__try{
pList->head = (PFILE_PROTECT_LIST_ITEM*) ExAllocatePoolWithTag(
NonPagedPool,
sizeof(PFILE_PROTECT_LIST_ITEM)*MaxNum,
TAGS
);
RtlZeroMemory(pList->head,sizeof(PFILE_PROTECT_LIST_ITEM)*MaxNum );
if (pList->head==NULL)
return STATUS_INSUFFICIENT_RESOURCES;
ExInitializeFastMutex( &(pList->mutex) );
pList->MaxNum = MaxNum;
}
__except ( EXCEPTION_EXECUTE_HANDLER )
{
RC = GetExceptionCode();
FsTPM_DbgPrint(( " Exception encountered with value = 0x%x ",RC ));
if ( pList->head!=NULL )
ExFreePool( pList->head );
pList->head = NULL;
pList->MaxNum = 0;
}
return RC;
}
VOID ReleaseList( PTLIST pList )
{
if ( pList->head!=NULL )
ExFreePool( pList->head );
pList->head = NULL;
pList->MaxNum = 0;
}
NTSTATUS ListInsert( PTLIST pList, PFILE_PROTECT_LIST_ITEM pItem )
{
//if( ProtectList_Is_In(pList, pItem->ProtectedFileName, &pItem) )
// return STATUS_UNSUCCESSFUL;
ExAcquireFastMutex( &pList->mutex );
if ( pList->MaxNum > pList->Count+1 )
{
pList->head[ pList->Count ] = pItem;
pList->Count++;
}
ExReleaseFastMutex( &(pList->mutex) );
return STATUS_SUCCESS;
}
NTSTATUS ListPickOutItem( IN PTLIST pList, IN WCHAR *wstr,OUT PFILE_PROTECT_LIST_ITEM *ppItem)
{
ULONG i,j;
*ppItem=NULL;
ExAcquireFastMutex( &pList->mutex );
if (pList->Count==0)
{
ExReleaseFastMutex( &(pList->mutex) );
return STATUS_SUCCESS;
}
for (i=0; i< pList->Count; i++)
{
if ( wcscmp(wstr, pList->head[i]->ProtectedFileName)==0 )
{
*ppItem = pList->head[i];
for (j=i; j<pList->Count; j++)
{
pList->head[j] = pList->head[j+1];
}
pList->Count--;
pList->head[pList->Count] = NULL;
ExReleaseFastMutex( &(pList->mutex) );
return STATUS_SUCCESS;
}
}
ExReleaseFastMutex( &(pList->mutex) );
return STATUS_UNSUCCESSFUL;
}
NTSTATUS ListDelete( IN PTLIST pList, IN WCHAR *wstr)
{
NTSTATUS ret;
PFILE_PROTECT_LIST_ITEM pItem;
ret = ListPickOutItem( pList,wstr, &pItem);
if (pItem != NULL)
ExFreePool(pItem);
return ret;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -