ReactOS  0.4.12-dev-14-gd0c8636
fltmc.cpp File Reference
#include <Windows.h>
#include <fltuser.h>
#include <atlstr.h>
#include <strsafe.h>
#include "resource.h"
Include dependency graph for fltmc.cpp:

Go to the source code of this file.

Functions

EXTERN_C int wmain (int argc, WCHAR *argv[])
 
void LoadAndPrintString (ULONG MessageId,...)
 
void PrintErrorText (_In_ ULONG ErrorCode)
 
DWORD SetDriverLoadPrivilege ()
 
void LoadFilter (_In_ LPWSTR FilterName)
 
void UnloadFilter (_In_ LPWSTR FilterName)
 
void PrintFilterInfo (_In_ PVOID Buffer, _In_ BOOL IsNewStyle)
 
void PrintVolumeInfo (_In_ PVOID Buffer)
 
void ListFilters ()
 
void ListVolumes ()
 

Function Documentation

◆ ListFilters()

void ListFilters ( )

Definition at line 264 of file fltmc.cpp.

Referenced by wmain().

265 {
266  HANDLE FindHandle;
267  BYTE Buffer[1024];
269  BOOL IsNewStyle = TRUE;
270  HRESULT hr;
271 
272  hr = FilterFindFirst(FilterAggregateStandardInformation,
273  Buffer,
274  1024,
275  &BytesReturned,
276  &FindHandle);
277  if (!SUCCEEDED(hr))
278  {
279  IsNewStyle = FALSE;
280  hr = FilterFindFirst(FilterFullInformation,
281  Buffer,
282  1024,
283  &BytesReturned,
284  &FindHandle);
285  }
286 
287  if (SUCCEEDED(hr))
288  {
289  if (IsNewStyle)
290  {
292  wprintf(L"------------------------------ ------------- ------------ -----\n");
293  }
294  else
295  {
297  wprintf(L"------------------------------ ------------- -----\n");
298  }
299 
300  PrintFilterInfo(Buffer, IsNewStyle);
301 
302  do
303  {
304  hr = FilterFindNext(FindHandle,
305  IsNewStyle ? FilterAggregateStandardInformation : FilterFullInformation,
306  Buffer,
307  1024,
308  &BytesReturned);
309  if (SUCCEEDED(hr))
310  {
311  PrintFilterInfo(Buffer, IsNewStyle);
312  }
313 
314  } while (SUCCEEDED(hr));
315 
316  FilterFindClose(FindHandle);
317  }
318 
320  {
322  PrintErrorText(hr);
323  }
324 }
#define TRUE
Definition: types.h:120
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
#define ERROR_NO_MORE_ITEMS
Definition: compat.h:95
#define IDS_DISPLAY_FILTERS2
Definition: resource.h:10
#define wprintf(...)
Definition: whoami.c:18
Definition: bufpool.h:45
void PrintErrorText(_In_ ULONG ErrorCode)
Definition: fltmc.cpp:41
unsigned int BOOL
Definition: ntddk_ex.h:94
#define IDS_ERROR_FILTERS
Definition: resource.h:14
LONG HRESULT
Definition: typedefs.h:77
void PrintFilterInfo(_In_ PVOID Buffer, _In_ BOOL IsNewStyle)
Definition: fltmc.cpp:131
_Must_inspect_result_ HRESULT WINAPI FilterFindClose(_In_ HANDLE hFilterFind)
Definition: stubs.c:143
static const WCHAR L[]
Definition: oid.c:1087
void LoadAndPrintString(ULONG MessageId,...)
Definition: fltmc.cpp:27
#define IDS_DISPLAY_FILTERS1
Definition: resource.h:9
unsigned char BYTE
Definition: ntddk_ex.h:96
_In_ FILTER_INFORMATION_CLASS _In_ ULONG _Out_ PULONG BytesReturned
Definition: fltkernel.h:1716
_Must_inspect_result_ HRESULT WINAPI FilterFindNext(_In_ HANDLE hFilterFind, _In_ FILTER_INFORMATION_CLASS dwInformationClass, _Out_writes_bytes_to_(dwBufferSize, *lpBytesReturned) LPVOID lpBuffer, _In_ DWORD dwBufferSize, _Out_ LPDWORD lpBytesReturned)
Definition: stubs.c:126
_Must_inspect_result_ HRESULT WINAPI FilterFindFirst(_In_ FILTER_INFORMATION_CLASS dwInformationClass, _Out_writes_bytes_to_(dwBufferSize, *lpBytesReturned) LPVOID lpBuffer, _In_ DWORD dwBufferSize, _Out_ LPDWORD lpBytesReturned, _Out_ LPHANDLE lpFilterFind)
Definition: stubs.c:109
unsigned int ULONG
Definition: retypes.h:1
#define SUCCEEDED(hr)
Definition: intsafe.h:57

◆ ListVolumes()

void ListVolumes ( )

Definition at line 327 of file fltmc.cpp.

Referenced by wmain().

328 {
329  HANDLE FindHandle;
330  BYTE Buffer[1024];
332  HRESULT hr;
333 
334  hr = FilterVolumeFindFirst(FilterVolumeStandardInformation,
335  Buffer,
336  1024,
337  &BytesReturned,
338  &FindHandle);
339  if (SUCCEEDED(hr))
340  {
342  wprintf(L"------------------------------ --------------------------------------- ---------- --------\n");
343 
344  PrintVolumeInfo(Buffer);
345 
346  do
347  {
348  hr = FilterVolumeFindNext(FindHandle,
349  FilterVolumeStandardInformation,
350  Buffer,
351  1024,
352  &BytesReturned);
353  if (SUCCEEDED(hr))
354  {
355  PrintVolumeInfo(Buffer);
356  }
357 
358  } while (SUCCEEDED(hr));
359 
360  FilterVolumeFindClose(FindHandle);
361  }
362 
364  {
366  PrintErrorText(hr);
367  }
368 }
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
#define ERROR_NO_MORE_ITEMS
Definition: compat.h:95
#define wprintf(...)
Definition: whoami.c:18
#define IDS_DISPLAY_VOLUMES
Definition: resource.h:11
Definition: bufpool.h:45
void PrintErrorText(_In_ ULONG ErrorCode)
Definition: fltmc.cpp:41
_Must_inspect_result_ HRESULT WINAPI FilterVolumeFindNext(_In_ HANDLE hVolumeFind, _In_ FILTER_VOLUME_INFORMATION_CLASS dwInformationClass, _Out_writes_bytes_to_(dwBufferSize, *lpBytesReturned) LPVOID lpBuffer, _In_ DWORD dwBufferSize, _Out_ LPDWORD lpBytesReturned)
Definition: stubs.c:169
LONG HRESULT
Definition: typedefs.h:77
static const WCHAR L[]
Definition: oid.c:1087
void LoadAndPrintString(ULONG MessageId,...)
Definition: fltmc.cpp:27
unsigned char BYTE
Definition: ntddk_ex.h:96
HRESULT WINAPI FilterVolumeFindClose(_In_ HANDLE hVolumeFind)
Definition: stubs.c:185
_In_ FILTER_INFORMATION_CLASS _In_ ULONG _Out_ PULONG BytesReturned
Definition: fltkernel.h:1716
_Must_inspect_result_ HRESULT WINAPI FilterVolumeFindFirst(_In_ FILTER_VOLUME_INFORMATION_CLASS dwInformationClass, _Out_writes_bytes_to_(dwBufferSize, *lpBytesReturned) LPVOID lpBuffer, _In_ DWORD dwBufferSize, _Out_ LPDWORD lpBytesReturned, _Out_ PHANDLE lpVolumeFind)
Definition: stubs.c:152
unsigned int ULONG
Definition: retypes.h:1
#define IDS_ERROR_VOLUMES
Definition: resource.h:17
void PrintVolumeInfo(_In_ PVOID Buffer)
Definition: fltmc.cpp:206
#define SUCCEEDED(hr)
Definition: intsafe.h:57

◆ LoadAndPrintString()

void LoadAndPrintString ( ULONG  MessageId,
  ... 
)

Definition at line 27 of file fltmc.cpp.

Referenced by ListFilters(), ListVolumes(), LoadFilter(), UnloadFilter(), and wmain().

28 {
29  va_list args;
30 
32  if (Message.LoadStringW(MessageId))
33  {
34  va_start(args, MessageId);
35  vwprintf(Message.GetBuffer(), args);
36  va_end(args);
37  }
38 }
#define va_end(ap)
Definition: acmsvcex.h:90
char * va_list
Definition: acmsvcex.h:78
_Check_return_opt_ _CRTIMP int __cdecl vwprintf(_In_z_ _Printf_format_string_ const wchar_t *_Format, va_list _ArgList)
CHAR Message[80]
Definition: alive.c:5
#define va_start(ap, A)
Definition: acmsvcex.h:91
#define args
Definition: format.c:66

◆ LoadFilter()

void LoadFilter ( _In_ LPWSTR  FilterName)

Definition at line 93 of file fltmc.cpp.

Referenced by wmain().

94 {
95  DWORD dwError;
96  dwError = SetDriverLoadPrivilege();
97  if (dwError != ERROR_SUCCESS)
98  {
100  return;
101  }
102 
103  HRESULT hr = FilterLoad(FilterName);
104  if (hr != S_OK)
105  {
107  PrintErrorText(hr);
108  }
109 }
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
#define ERROR_SUCCESS
Definition: deptool.c:10
void PrintErrorText(_In_ ULONG ErrorCode)
Definition: fltmc.cpp:41
LONG HRESULT
Definition: typedefs.h:77
unsigned long DWORD
Definition: ntddk_ex.h:95
DWORD SetDriverLoadPrivilege()
Definition: fltmc.cpp:57
void LoadAndPrintString(ULONG MessageId,...)
Definition: fltmc.cpp:27
#define IDS_ERROR_LOAD
Definition: resource.h:15
#define S_OK
Definition: intsafe.h:59
_Must_inspect_result_ HRESULT WINAPI FilterLoad(_In_ LPCWSTR lpFilterName)
Definition: fltlib.c:42
#define IDS_ERROR_PRIV
Definition: resource.h:13

◆ PrintErrorText()

void PrintErrorText ( _In_ ULONG  ErrorCode)

Definition at line 41 of file fltmc.cpp.

Referenced by ListFilters(), ListVolumes(), LoadFilter(), and UnloadFilter().

42 {
43  WCHAR Buffer[256];
45  0,
46  ErrorCode,
47  0,
48  Buffer,
49  256,
50  0))
51  {
52  wprintf(L"%s\n", Buffer);
53  }
54 }
_In_ NDIS_ERROR_CODE ErrorCode
Definition: ndis.h:4418
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define wprintf(...)
Definition: whoami.c:18
DWORD WINAPI FormatMessageW(DWORD dwFlags, LPCVOID lpSource, DWORD dwMessageId, DWORD dwLanguageId, LPWSTR lpBuffer, DWORD nSize, __ms_va_list *args)
Definition: format_msg.c:583
Definition: bufpool.h:45
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:404
static const WCHAR L[]
Definition: oid.c:1087

◆ PrintFilterInfo()

void PrintFilterInfo ( _In_ PVOID  Buffer,
_In_ BOOL  IsNewStyle 
)

Definition at line 131 of file fltmc.cpp.

Referenced by ListFilters().

133 {
134  WCHAR FilterName[128] = { 0 };
135  WCHAR NumOfInstances[16] = { 0 };
136  WCHAR Altitude[64] = { 0 };
137  WCHAR Frame[16] = { 0 };
138 
139  if (IsNewStyle)
140  {
141  PFILTER_AGGREGATE_STANDARD_INFORMATION FilterAggInfo;
142  FilterAggInfo = (PFILTER_AGGREGATE_STANDARD_INFORMATION)Buffer;
143 
144  if (FilterAggInfo->Flags & FLTFL_ASI_IS_MINIFILTER)
145  {
146  if (FilterAggInfo->Type.MiniFilter.FilterNameLength < 128)
147  {
148  CopyMemory(FilterName,
149  (PCHAR)FilterAggInfo + FilterAggInfo->Type.MiniFilter.FilterNameBufferOffset,
150  FilterAggInfo->Type.MiniFilter.FilterNameLength);
151  FilterName[FilterAggInfo->Type.MiniFilter.FilterNameLength] = UNICODE_NULL;
152  }
153 
154  StringCchPrintfW(NumOfInstances, 16, L"%lu", FilterAggInfo->Type.MiniFilter.NumberOfInstances);
155 
156  if (FilterAggInfo->Type.MiniFilter.FilterAltitudeLength < 64)
157  {
158  CopyMemory(Altitude,
159  (PCHAR)FilterAggInfo + FilterAggInfo->Type.MiniFilter.FilterAltitudeBufferOffset,
160  FilterAggInfo->Type.MiniFilter.FilterAltitudeLength);
161  FilterName[FilterAggInfo->Type.MiniFilter.FilterAltitudeLength] = UNICODE_NULL;
162  }
163 
164  StringCchPrintfW(Frame, 16, L"%lu", FilterAggInfo->Type.MiniFilter.FrameID);
165  }
166  else if (FilterAggInfo->Flags & FLTFL_ASI_IS_LEGACYFILTER)
167  {
168  if (FilterAggInfo->Type.LegacyFilter.FilterNameLength < 128)
169  {
170  CopyMemory(FilterName,
171  (PCHAR)FilterAggInfo + FilterAggInfo->Type.LegacyFilter.FilterNameBufferOffset,
172  FilterAggInfo->Type.LegacyFilter.FilterNameLength);
173  FilterName[FilterAggInfo->Type.LegacyFilter.FilterNameLength] = UNICODE_NULL;
174  }
175 
176  StringCchCopyW(Frame, 16, L"<Legacy>"); //Fixme: is this localized?
177  }
178 
179  wprintf(L"%-38s %-10s %-10s %3s\n",
180  FilterName,
181  NumOfInstances,
182  Altitude,
183  Frame);
184  }
185  else
186  {
187  PFILTER_FULL_INFORMATION FilterInfo;
188  FilterInfo = (PFILTER_FULL_INFORMATION)Buffer;
189 
190  if (FilterInfo->FilterNameLength < 128)
191  {
192  CopyMemory(FilterName,
193  FilterInfo->FilterNameBuffer,
194  FilterInfo->FilterNameLength);
195  FilterName[FilterInfo->FilterNameLength] = UNICODE_NULL;
196  }
197 
198  wprintf(L"%-38s %-10lu %-10lu\n",
199  FilterName,
200  FilterInfo->NumberOfInstances,
201  FilterInfo->FrameID);
202  }
203 }
signed char * PCHAR
Definition: retypes.h:7
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define wprintf(...)
Definition: whoami.c:18
#define UNICODE_NULL
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
Definition: bufpool.h:45
_Must_inspect_result_ _Inout_ PFLT_VOLUME _In_ PCUNICODE_STRING Altitude
Definition: fltkernel.h:1172
#define CopyMemory
Definition: winbase.h:1633
static const WCHAR L[]
Definition: oid.c:1087
STRSAFEAPI StringCchPrintfW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszFormat,...)
Definition: strsafe.h:530

◆ PrintVolumeInfo()

void PrintVolumeInfo ( _In_ PVOID  Buffer)

Definition at line 206 of file fltmc.cpp.

Referenced by ListVolumes().

207 {
208  PFILTER_VOLUME_STANDARD_INFORMATION FilterVolInfo;
209  WCHAR DosName[16] = { 0 };
210  WCHAR VolName[128] = { 0 };
211  WCHAR FileSystem[32] = { 0 };
212 
213  FilterVolInfo = (PFILTER_VOLUME_STANDARD_INFORMATION)Buffer;
214 
215  if (FilterVolInfo->FilterVolumeNameLength < 128)
216  {
217  CopyMemory(VolName,
218  (PCHAR)FilterVolInfo->FilterVolumeName,
219  FilterVolInfo->FilterVolumeNameLength);
220  VolName[FilterVolInfo->FilterVolumeNameLength] = UNICODE_NULL;
221  }
222 
223  (void)FilterGetDosName(VolName, DosName, 16);
224 
225  switch (FilterVolInfo->FileSystemType)
226  {
227  case FLT_FSTYPE_MUP:
228  StringCchCopyW(FileSystem, 32, L"Remote");
229  break;
230 
231  case FLT_FSTYPE_NTFS:
232  StringCchCopyW(FileSystem, 32, L"NTFS");
233  break;
234 
235  case FLT_FSTYPE_FAT:
236  StringCchCopyW(FileSystem, 32, L"FAT");
237  break;
238 
239  case FLT_FSTYPE_EXFAT:
240  StringCchCopyW(FileSystem, 32, L"exFAT");
241  break;
242 
243  case FLT_FSTYPE_NPFS:
244  StringCchCopyW(FileSystem, 32, L"NamedPipe");
245  break;
246 
247  case FLT_FSTYPE_MSFS:
248  StringCchCopyW(FileSystem, 32, L"Mailslot");
249  break;
250 
251  case FLT_FSTYPE_UNKNOWN:
252  default:
253  StringCchCopyW(FileSystem, 32, L"<Unknown>");
254  break;
255  }
256 
257  wprintf(L"%-31s %-40s %-10s\n",
258  DosName,
259  VolName,
260  FileSystem);
261 }
signed char * PCHAR
Definition: retypes.h:7
struct png_info_def **typedef void(__cdecl typeof(png_destroy_read_struct))(struct png_struct_def **
Definition: typeof.h:47
PWCHAR FileSystem
Definition: format.c:72
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define wprintf(...)
Definition: whoami.c:18
#define UNICODE_NULL
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149
Definition: bufpool.h:45
_Must_inspect_result_ HRESULT WINAPI FilterGetDosName(_In_ LPCWSTR lpVolumeName, _Out_writes_(dwDosNameBufferSize) LPWSTR lpDosName, _In_ DWORD dwDosNameBufferSize)
Definition: stubs.c:318
#define CopyMemory
Definition: winbase.h:1633
static const WCHAR L[]
Definition: oid.c:1087
_Out_ PUNICODE_STRING DosName
Definition: rtlfuncs.h:1270

◆ SetDriverLoadPrivilege()

DWORD SetDriverLoadPrivilege ( )

Definition at line 57 of file fltmc.cpp.

Referenced by LoadFilter(), and UnloadFilter().

58 {
60  HANDLE hToken;
61  LUID luid;
62  BOOL bSuccess;
63  DWORD dwError = ERROR_SUCCESS;
64 
67  &hToken);
68  if (bSuccess == FALSE)
69  return GetLastError();
70 
72  return GetLastError();
73 
74  TokenPrivileges.PrivilegeCount = 1;
75  TokenPrivileges.Privileges[0].Luid = luid;
76  TokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
77 
78  bSuccess = AdjustTokenPrivileges(hToken,
79  FALSE,
80  &TokenPrivileges,
81  sizeof(TOKEN_PRIVILEGES),
82  NULL,
83  NULL);
84  if (bSuccess == FALSE)
85  dwError = GetLastError();
86 
87  CloseHandle(hToken);
88 
89  return dwError;
90 }
#define CloseHandle
Definition: compat.h:398
BOOL WINAPI LookupPrivilegeValueW(LPCWSTR lpSystemName, LPCWSTR lpPrivilegeName, PLUID lpLuid)
Definition: misc.c:782
#define ERROR_SUCCESS
Definition: deptool.c:10
$ULONG PrivilegeCount
Definition: setypes.h:969
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
static BOOLEAN bSuccess
Definition: drive.cpp:419
#define SE_PRIVILEGE_ENABLED
Definition: setypes.h:63
smooth NULL
Definition: ftsmooth.c:416
unsigned int BOOL
Definition: ntddk_ex.h:94
HANDLE WINAPI GetCurrentProcess(VOID)
Definition: proc.c:1168
unsigned long DWORD
Definition: ntddk_ex.h:95
BOOL WINAPI AdjustTokenPrivileges(HANDLE TokenHandle, BOOL DisableAllPrivileges, PTOKEN_PRIVILEGES NewState, DWORD BufferLength, PTOKEN_PRIVILEGES PreviousState, PDWORD ReturnLength)
Definition: security.c:372
BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle)
Definition: security.c:292
LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY]
Definition: setypes.h:970
#define TOKEN_ADJUST_PRIVILEGES
Definition: setypes.h:876
#define SE_LOAD_DRIVER_NAME
Definition: winnt_old.h:374

◆ UnloadFilter()

void UnloadFilter ( _In_ LPWSTR  FilterName)

Definition at line 112 of file fltmc.cpp.

Referenced by wmain().

113 {
114  DWORD dwError;
115  dwError = SetDriverLoadPrivilege();
116  if (dwError != ERROR_SUCCESS)
117  {
119  return;
120  }
121 
122  HRESULT hr = FilterUnload(FilterName);
123  if (hr != S_OK)
124  {
126  PrintErrorText(hr);
127  }
128 }
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
#define ERROR_SUCCESS
Definition: deptool.c:10
_Must_inspect_result_ HRESULT WINAPI FilterUnload(_In_ LPCWSTR lpFilterName)
Definition: fltlib.c:50
void PrintErrorText(_In_ ULONG ErrorCode)
Definition: fltmc.cpp:41
LONG HRESULT
Definition: typedefs.h:77
unsigned long DWORD
Definition: ntddk_ex.h:95
DWORD SetDriverLoadPrivilege()
Definition: fltmc.cpp:57
void LoadAndPrintString(ULONG MessageId,...)
Definition: fltmc.cpp:27
#define S_OK
Definition: intsafe.h:59
#define IDS_ERROR_UNLOAD
Definition: resource.h:16
#define IDS_ERROR_PRIV
Definition: resource.h:13

◆ wmain()

EXTERN_C int wmain ( int  argc,
WCHAR argv[] 
)

Definition at line 370 of file fltmc.cpp.

371 {
372  wprintf(L"\n");
373 
374  if ((argc < 2) || (!_wcsicmp(argv[1], L"filters")))
375  {
376  if (argc < 3)
377  {
378  ListFilters();
379  }
380  else
381  {
383  wprintf(L"fltmc.exe filters\n\n");
384  }
385  }
386  else if (!_wcsicmp(argv[1], L"help"))
387  {
389  }
390  else if (!_wcsicmp(argv[1], L"load"))
391  {
392  if (argc == 3)
393  {
394  LoadFilter(argv[2]);
395  }
396  else
397  {
399  wprintf(L"fltmc.exe load [name]\n\n");
400  }
401  }
402  else if (!_wcsicmp(argv[1], L"unload"))
403  {
404  if (argc == 3)
405  {
406  UnloadFilter(argv[2]);
407  }
408  else
409  {
411  wprintf(L"fltmc.exe unload [name]\n\n");
412  }
413  }
414  else if (!_wcsicmp(argv[1], L"volumes"))
415  {
416  if (argc == 2)
417  {
418  ListVolumes();
419  }
420  else
421  {
423  wprintf(L"fltmc.exe volumes\n\n");
424  }
425  }
426 
427  return 0;
428 }
void LoadFilter(_In_ LPWSTR FilterName)
Definition: fltmc.cpp:93
static int argc
Definition: ServiceArgs.c:12
#define IDS_USAGE_FILTERS
Definition: resource.h:6
#define IDS_USAGE
Definition: resource.h:3
#define wprintf(...)
Definition: whoami.c:18
static char ** argv
Definition: ServiceArgs.c:11
#define IDS_USAGE_LOAD
Definition: resource.h:4
void ListVolumes()
Definition: fltmc.cpp:327
static const WCHAR L[]
Definition: oid.c:1087
void LoadAndPrintString(ULONG MessageId,...)
Definition: fltmc.cpp:27
void UnloadFilter(_In_ LPWSTR FilterName)
Definition: fltmc.cpp:112
void ListFilters()
Definition: fltmc.cpp:264
#define IDS_USAGE_UNLOAD
Definition: resource.h:5
_Check_return_ _CRTIMP int __cdecl _wcsicmp(_In_z_ const wchar_t *_Str1, _In_z_ const wchar_t *_Str2)
#define IDS_USAGE_VOLUMES
Definition: resource.h:7