⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 list.cpp

📁 文件过滤系统
💻 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 + -