다양하지만 정형화된 방법으로 인해서 더이상 아이디어가 나오지
못하는 형편이다,,큭
일단 XP의 상황에서 IRP_MJ_DIRECTORY_CONTROL의
MAJOR IRP가 날라오면,
MINOR로 IRP_MN_QUERY_DIRECTORY이다.
이때 여기에 감추는 루틴을 작성하면 된다.
근데 XP와 VISTA는 사용하는 Class가 다르다는 것이다,, - _-;
삽질끝에 알았는데,
XP의 경우 폴더 목록 요청시 Class가 FileBothDirectoryInforamation이고,
Vista의 경우에는 FileIdBothDirectoryInformation을 사용하더라,, 췌
- NTSTATUS InitializeHiddenFileList()
- {
- int i;
- for( i = 0 ; i < MAXHIDDENFILEENTRIES ; i ++ )
- {
- g_HiddenFileList[ i ] = (WCHAR *)ExAllocatePool( NonPagedPool, MAXHIDDENFILENAMESIZE * sizeof(WCHAR) );
- if( !g_HiddenFileList[ i ] )
- return STATUS_UNSUCCESSFUL;
- RtlZeroMemory( g_HiddenFileList[ i ], MAXHIDDENFILENAMESIZE * sizeof(WCHAR) );
- }
- return STATUS_SUCCESS;
- }
- ULONG IsExistHiddenFileList( WCHAR *pwFilename )
- {
- int i;
- for( i = 0 ; i < MAXHIDDENFILEENTRIES ; i ++ )
- {
- if( !g_HiddenFileList[ i ] )
- continue;
- if( _wcsicmp( g_HiddenFileList[ i ], pwFilename ) )
- continue;
- return TRUE;
- }
- return FALSE;
- }
출처 : http://ssmhz.tistory.com/145