ca79a13e319b22f8709acc567b76ad602d76f576
[openafs.git] / src / WINNT / afsrdr / kernel / fs / Include / AFSCommon.h
1 /*
2  * Copyright (c) 2008, 2009, 2010, 2011 Kernel Drivers, LLC.
3  * Copyright (c) 2009, 2010, 2011 Your File System, Inc.
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  * - Redistributions of source code must retain the above copyright notice,
11  *   this list of conditions and the following disclaimer.
12  * - Redistributions in binary form must reproduce the above copyright
13  *   notice,
14  *   this list of conditions and the following disclaimer in the
15  *   documentation
16  *   and/or other materials provided with the distribution.
17  * - Neither the names of Kernel Drivers, LLC and Your File System, Inc.
18  *   nor the names of their contributors may be used to endorse or promote
19  *   products derived from this software without specific prior written
20  *   permission from Kernel Drivers, LLC and Your File System, Inc.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
23  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
24  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
25  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
26  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
27  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
28  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
29  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
30  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
31  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33  */
34
35 #ifndef _AFS_COMMON_H
36 #define _AFS_COMMON_H
37
38 //
39 // File: AFSCommon.h
40 //
41
42 extern "C"
43 {
44
45 #define AFS_KERNEL_MODE
46
47 #include <ntifs.h>
48 #include <wdmsec.h> // for IoCreateDeviceSecure
49 #include <initguid.h>
50
51 #include "AFSDefines.h"
52
53 #include "AFSUserDefines.h"
54
55 #include "AFSUserIoctl.h"
56
57 #include "AFSUserStructs.h"
58
59 #include "AFSRedirCommonDefines.h"
60
61 #include "AFSRedirCommonStructs.h"
62
63 #include "AFSStructs.h"
64
65 #include "AFSProvider.h"
66
67 #ifndef NO_EXTERN
68 #include "AFSExtern.h"
69 #endif
70
71 #define NTSTRSAFE_LIB
72 #include "ntstrsafe.h"
73
74 NTSTATUS
75 ZwQueryInformationProcess(
76   __in       HANDLE ProcessHandle,
77   __in       PROCESSINFOCLASS ProcessInformationClass,
78   __out      PVOID ProcessInformation,
79   __in       ULONG ProcessInformationLength,
80   __out_opt  PULONG ReturnLength
81 );
82
83 //
84 // AFSInit.cpp Prototypes
85 //
86
87 NTSTATUS
88 DriverEntry( IN PDRIVER_OBJECT DriverObj,
89              IN PUNICODE_STRING RegPath);
90
91 void
92 AFSUnload( IN PDRIVER_OBJECT DriverObject);
93
94 //
95 // AFSAuthGroupSupport.cpp
96 //
97
98 void
99 AFSRetrieveAuthGroup( IN ULONGLONG ProcessId,
100                       IN ULONGLONG ThreadId,
101                       OUT GUID *AuthGroup);
102
103 BOOLEAN
104 AFSIsLocalSystemAuthGroup( IN GUID *AuthGroup);
105
106 BOOLEAN
107 AFSIsLocalSystemSID( IN UNICODE_STRING *SIDString);
108
109 BOOLEAN
110 AFSIsNoPAGAuthGroup( IN GUID *AuthGroup);
111
112 NTSTATUS
113 AFSCreateSetProcessAuthGroup( AFSAuthGroupRequestCB *CreateSetAuthGroup);
114
115 NTSTATUS
116 AFSQueryProcessAuthGroupList( IN GUID *GUIDList,
117                               IN ULONG BufferLength,
118                               OUT ULONG_PTR *ReturnLength);
119
120 NTSTATUS
121 AFSSetActiveProcessAuthGroup( IN AFSAuthGroupRequestCB *ActiveAuthGroup);
122
123 NTSTATUS
124 AFSResetActiveProcessAuthGroup( IN AFSAuthGroupRequestCB *ActiveAuthGroup);
125
126 NTSTATUS
127 AFSCreateAuthGroupForSIDorLogonSession( IN AFSAuthGroupRequestCB *AuthGroupRequestCB,
128                                         IN BOOLEAN bLogonSession);
129
130 NTSTATUS
131 AFSQueryAuthGroup( IN AFSAuthGroupRequestCB *AuthGroupRequestCB,
132                    OUT GUID *AuthGroupGUID,
133                    OUT ULONG_PTR *ReturnLength);
134
135 //
136 // AFSBTreeSupport.cpp Prototypes
137 //
138
139 NTSTATUS
140 AFSLocateHashEntry( IN AFSBTreeEntry *TopNode,
141                     IN ULONGLONG HashIndex,
142                     IN OUT AFSBTreeEntry **TreeEntry);
143
144 NTSTATUS
145 AFSInsertHashEntry( IN AFSBTreeEntry *TopNode,
146                     IN AFSBTreeEntry *FileIDEntry);
147
148 NTSTATUS
149 AFSRemoveHashEntry( IN AFSBTreeEntry **TopNode,
150                     IN AFSBTreeEntry *FileIDEntry);
151
152 //
153 // AFSCommSupport.cpp Prototypes
154 //
155
156 NTSTATUS
157 AFSReleaseFid( IN AFSFileID *FileId);
158
159 NTSTATUS
160 AFSProcessRequest( IN ULONG RequestType,
161                    IN ULONG RequestFlags,
162                    IN GUID *AuthGroup,
163                    IN PUNICODE_STRING FileName,
164                    IN AFSFileID *FileId,
165                    IN WCHAR * Cell,
166                    IN ULONG   CellLength,
167                    IN void  *Data,
168                    IN ULONG DataLength,
169                    IN OUT void *ResultBuffer,
170                    IN OUT PULONG ResultBufferLength);
171
172 NTSTATUS
173 AFSProcessControlRequest( IN PIRP Irp);
174
175 NTSTATUS
176 AFSInitIrpPool( void);
177
178 void
179 AFSCleanupIrpPool( void);
180
181 NTSTATUS
182 AFSProcessIrpRequest( IN PIRP Irp);
183
184 NTSTATUS
185 AFSProcessIrpResult( IN PIRP Irp);
186
187 NTSTATUS
188 AFSInsertRequest( IN AFSCommSrvcCB *CommSrvc,
189                   IN AFSPoolEntry *Entry);
190
191 //
192 // AFSCreate.cpp Prototypes
193 //
194
195 NTSTATUS
196 AFSCreate( IN PDEVICE_OBJECT DeviceObject,
197            IN PIRP Irp);
198
199 NTSTATUS
200 AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
201                  IN PIRP Irp);
202
203 NTSTATUS
204 AFSControlDeviceCreate( IN PIRP Irp);
205
206 NTSTATUS
207 AFSOpenRedirector( IN PIRP Irp);
208
209 NTSTATUS
210 AFSInitRdrFcb( OUT AFSFcb **RdrFcb);
211
212 void
213 AFSRemoveRdrFcb( IN OUT AFSFcb **RdrFcb);
214
215 //
216 // AFSClose.cpp Prototypes
217 //
218
219 NTSTATUS
220 AFSClose( IN PDEVICE_OBJECT DeviceObject,
221           IN PIRP Irp);
222
223 NTSTATUS
224 AFSCommonClose( IN PDEVICE_OBJECT DeviceObject,
225                 IN PIRP Irp);
226
227 //
228 // AFSNetworkProviderSupport.cpp
229 //
230
231 NTSTATUS
232 AFSAddConnectionEx( IN UNICODE_STRING *RemoteName,
233                     IN ULONG DisplayType,
234                     IN ULONG Flags);
235
236 void
237 AFSInitializeConnectionInfo( IN AFSProviderConnectionCB *Connection,
238                              IN ULONG DisplayType);
239
240 //
241 // AFSRead.cpp Prototypes
242 //
243
244 NTSTATUS
245 AFSRead( IN PDEVICE_OBJECT DeviceObject,
246          IN PIRP Irp);
247
248 //
249 // AFSWrite.cpp Prototypes
250 //
251
252 NTSTATUS
253 AFSWrite( IN PDEVICE_OBJECT DeviceObject,
254                 IN PIRP Irp);
255
256 //
257 // AFSFileInfo.cpp Prototypes
258 //
259
260 NTSTATUS
261 AFSQueryFileInfo( IN PDEVICE_OBJECT DeviceObject,
262                   IN PIRP Irp);
263
264 NTSTATUS
265 AFSSetFileInfo( IN PDEVICE_OBJECT DeviceObject,
266                 IN PIRP Irp);
267
268 //
269 // AFSEa.cpp Prototypes
270 //
271
272 NTSTATUS
273 AFSQueryEA( IN PDEVICE_OBJECT DeviceObject,
274             IN PIRP Irp);
275
276 NTSTATUS
277 AFSSetEA( IN PDEVICE_OBJECT DeviceObject,
278           IN PIRP Irp);
279
280 //
281 // AFSFlushBuffers.cpp Prototypes
282 //
283
284 NTSTATUS
285 AFSFlushBuffers( IN PDEVICE_OBJECT DeviceObject,
286                  IN PIRP Irp);
287
288 //
289 // AFSVolumeInfo.cpp Prototypes
290 //
291
292 NTSTATUS
293 AFSQueryVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
294                     IN PIRP Irp);
295
296 NTSTATUS
297 AFSSetVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
298                   IN PIRP Irp);
299
300 NTSTATUS
301 AFSSetVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
302                   IN PIRP Irp);
303
304 //
305 // AFSDirControl.cpp Prototypes
306 //
307
308 NTSTATUS
309 AFSDirControl( IN PDEVICE_OBJECT DeviceObject,
310                IN PIRP Irp);
311
312 //
313 // AFSFSControl.cpp Prototypes
314 //
315
316 NTSTATUS
317 AFSFSControl( IN PDEVICE_OBJECT DeviceObject,
318               IN PIRP Irp);
319
320 //
321 // AFSDevControl.cpp Prototypes
322 //
323
324 NTSTATUS
325 AFSDevControl( IN PDEVICE_OBJECT DeviceObject,
326                IN PIRP Irp);
327
328 //
329 // AFSInternalDevControl.cpp Prototypes
330 //
331
332 NTSTATUS
333 AFSInternalDevControl( IN PDEVICE_OBJECT DeviceObject,
334                        IN PIRP Irp);
335
336 //
337 // AFSShutdown.cpp Prototypes
338 //
339
340 NTSTATUS
341 AFSShutdown( IN PDEVICE_OBJECT DeviceObject,
342              IN PIRP Irp);
343
344
345 NTSTATUS
346 AFSShutdownFilesystem( void);
347
348 //
349 // AFSLockControl.cpp Prototypes
350 //
351
352 NTSTATUS
353 AFSLockControl( IN PDEVICE_OBJECT DeviceObject,
354                 IN PIRP Irp);
355
356 //
357 // AFSCleanup.cpp Prototypes
358 //
359
360 NTSTATUS
361 AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
362             IN PIRP Irp);
363
364 NTSTATUS
365 AFSCommonCleanup( IN PDEVICE_OBJECT DeviceObject,
366                   IN PIRP Irp);
367
368 //
369 // AFSSecurity.cpp Prototypes
370 //
371
372 NTSTATUS
373 AFSQuerySecurity( IN PDEVICE_OBJECT DeviceObject,
374                   IN PIRP Irp);
375
376 NTSTATUS
377 AFSSetSecurity( IN PDEVICE_OBJECT DeviceObject,
378                 IN PIRP Irp);
379
380 //
381 // AFSSystemControl.cpp Prototypes
382 //
383
384 NTSTATUS
385 AFSSystemControl( IN PDEVICE_OBJECT DeviceObject,
386                   IN PIRP Irp);
387
388 //
389 // AFSQuota.cpp Prototypes
390 //
391
392 NTSTATUS
393 AFSQueryQuota( IN PDEVICE_OBJECT DeviceObject,
394                IN PIRP Irp);
395
396 NTSTATUS
397 AFSSetQuota( IN PDEVICE_OBJECT DeviceObject,
398              IN PIRP Irp);
399
400 //
401 // AFSGeneric.cpp Prototypes
402 //
403
404 ULONG
405 AFSExceptionFilter( IN CHAR *FunctionString,
406                     IN ULONG Code,
407                     IN PEXCEPTION_POINTERS ExceptPtrs);
408
409 BOOLEAN
410 AFSAcquireExcl( IN PERESOURCE Resource,
411                 IN BOOLEAN wait);
412
413 BOOLEAN
414 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
415                                  IN BOOLEAN Wait);
416
417 BOOLEAN
418 AFSAcquireShared( IN PERESOURCE Resource,
419                   IN BOOLEAN wait);
420
421 void
422 AFSReleaseResource( IN PERESOURCE Resource);
423
424 void
425 AFSConvertToShared( IN PERESOURCE Resource);
426
427 void
428 AFSCompleteRequest( IN PIRP Irp,
429                     IN ULONG Status);
430
431 NTSTATUS
432 AFSReadRegistry( IN PUNICODE_STRING RegistryPath);
433
434 NTSTATUS
435 AFSUpdateRegistryParameter( IN PUNICODE_STRING ValueName,
436                             IN ULONG ValueType,
437                             IN void *ValueData,
438                             IN ULONG ValueDataLength);
439
440 NTSTATUS
441 AFSInitializeControlDevice( void);
442
443 NTSTATUS
444 AFSRemoveControlDevice( void);
445
446 NTSTATUS
447 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
448                     IN PIRP Irp);
449
450 NTSTATUS
451 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
452                 IN PIRP           Irp,
453                 IN PVOID          Context);
454
455 void
456 AFSInitServerStrings( void);
457
458 NTSTATUS
459 AFSReadServerName( void);
460
461 NTSTATUS
462 AFSReadMountRootName( void);
463
464 NTSTATUS
465 AFSSetSysNameInformation( IN AFSSysNameNotificationCB *SysNameInfo,
466                           IN ULONG SysNameInfoBufferLength);
467
468 void
469 AFSResetSysNameList( IN AFSSysNameCB *SysNameList);
470
471 NTSTATUS
472 AFSSendDeviceIoControl( IN DEVICE_OBJECT *TargetDeviceObject,
473                         IN ULONG IOControl,
474                         IN void *InputBuffer,
475                         IN ULONG InputBufferLength,
476                         IN OUT void *OutputBuffer,
477                         IN ULONG OutputBufferLength,
478                         OUT ULONG *ResultLength);
479
480 void *
481 AFSExAllocatePoolWithTag( IN POOL_TYPE  PoolType,
482                           IN SIZE_T  NumberOfBytes,
483                           IN ULONG  Tag);
484
485 void
486 AFSExFreePoolWithTag( IN void *Buffer, IN ULONG Tag);
487
488 NTSTATUS
489 AFSShutdownRedirector( void);
490
491 BOOLEAN
492 AFSAcquireFcbForLazyWrite( IN PVOID Fcb,
493                            IN BOOLEAN Wait);
494
495 VOID
496 AFSReleaseFcbFromLazyWrite( IN PVOID Fcb);
497
498 BOOLEAN
499 AFSAcquireFcbForReadAhead( IN PVOID Fcb,
500                            IN BOOLEAN Wait);
501
502 VOID
503 AFSReleaseFcbFromReadAhead( IN PVOID Fcb);
504
505 NTSTATUS
506 AFSGetCallerSID( OUT UNICODE_STRING *SIDString,
507                  OUT BOOLEAN *pbImpersonation);
508
509 ULONG
510 AFSGetSessionId( IN HANDLE ProcessId,
511                  OUT BOOLEAN *pbImpersonation);
512
513 NTSTATUS
514 AFSCheckThreadDacl( OUT GUID *AuthGroup);
515
516 NTSTATUS
517 AFSProcessSetProcessDacl( IN AFSProcessCB *ProcessCB);
518
519 //
520 // Prototypes in AFSFastIoSupprt.cpp
521 //
522
523 BOOLEAN
524 AFSFastIoCheckIfPossible( IN struct _FILE_OBJECT *FileObject,
525                           IN PLARGE_INTEGER FileOffset,
526                           IN ULONG Length,
527                           IN BOOLEAN Wait,
528                           IN ULONG LockKey,
529                           IN BOOLEAN CheckForReadOperation,
530                           OUT PIO_STATUS_BLOCK IoStatus,
531                           IN struct _DEVICE_OBJECT *DeviceObject);
532
533 BOOLEAN
534 AFSFastIoRead( IN struct _FILE_OBJECT *FileObject,
535                IN PLARGE_INTEGER FileOffset,
536                IN ULONG Length,
537                IN BOOLEAN Wait,
538                IN ULONG LockKey,
539                OUT PVOID Buffer,
540                OUT PIO_STATUS_BLOCK IoStatus,
541                IN struct _DEVICE_OBJECT *DeviceObject);
542
543 BOOLEAN
544 AFSFastIoWrite( IN struct _FILE_OBJECT *FileObject,
545                 IN PLARGE_INTEGER FileOffset,
546                 IN ULONG Length,
547                 IN BOOLEAN Wait,
548                 IN ULONG LockKey,
549                 IN PVOID Buffer,
550                 OUT PIO_STATUS_BLOCK IoStatus,
551                 IN struct _DEVICE_OBJECT *DeviceObject);
552
553 BOOLEAN
554 AFSFastIoQueryBasicInfo( IN struct _FILE_OBJECT *FileObject,
555                          IN BOOLEAN Wait,
556                          OUT PFILE_BASIC_INFORMATION Buffer,
557                          OUT PIO_STATUS_BLOCK IoStatus,
558                          IN struct _DEVICE_OBJECT *DeviceObject);
559
560 BOOLEAN
561 AFSFastIoQueryStandardInfo( IN struct _FILE_OBJECT *FileObject,
562                             IN BOOLEAN Wait,
563                             OUT PFILE_STANDARD_INFORMATION Buffer,
564                             OUT PIO_STATUS_BLOCK IoStatus,
565                             IN struct _DEVICE_OBJECT *DeviceObject);
566
567 BOOLEAN
568 AFSFastIoLock( IN struct _FILE_OBJECT *FileObject,
569                IN PLARGE_INTEGER FileOffset,
570                IN PLARGE_INTEGER Length,
571                IN PEPROCESS ProcessId,
572                IN ULONG Key,
573                IN BOOLEAN FailImmediately,
574                IN BOOLEAN ExclusiveLock,
575                OUT PIO_STATUS_BLOCK IoStatus,
576                IN struct _DEVICE_OBJECT *DeviceObject);
577
578 BOOLEAN
579 AFSFastIoUnlockSingle( IN struct _FILE_OBJECT *FileObject,
580                        IN PLARGE_INTEGER FileOffset,
581                        IN PLARGE_INTEGER Length,
582                        IN PEPROCESS ProcessId,
583                        IN ULONG Key,
584                        OUT PIO_STATUS_BLOCK IoStatus,
585                        IN struct _DEVICE_OBJECT *DeviceObject);
586
587 BOOLEAN
588 AFSFastIoUnlockAll( IN struct _FILE_OBJECT *FileObject,
589                     IN PEPROCESS ProcessId,
590                     OUT PIO_STATUS_BLOCK IoStatus,
591                     IN struct _DEVICE_OBJECT *DeviceObject);
592
593 BOOLEAN
594 AFSFastIoUnlockAllByKey( IN struct _FILE_OBJECT *FileObject,
595                          IN PVOID ProcessId,
596                          IN ULONG Key,
597                          OUT PIO_STATUS_BLOCK IoStatus,
598                          IN struct _DEVICE_OBJECT *DeviceObject);
599
600 BOOLEAN
601 AFSFastIoDevCtrl( IN struct _FILE_OBJECT *FileObject,
602                   IN BOOLEAN Wait,
603                   IN PVOID InputBuffer OPTIONAL,
604                   IN ULONG InputBufferLength,
605                   OUT PVOID OutputBuffer OPTIONAL,
606                   IN ULONG OutputBufferLength,
607                   IN ULONG IoControlCode,
608                   OUT PIO_STATUS_BLOCK IoStatus,
609                   IN struct _DEVICE_OBJECT *DeviceObject);
610
611 VOID
612 AFSFastIoAcquireFile( IN struct _FILE_OBJECT *FileObject);
613
614 VOID
615 AFSFastIoReleaseFile( IN struct _FILE_OBJECT *FileObject);
616
617 VOID
618 AFSFastIoDetachDevice( IN struct _DEVICE_OBJECT *SourceDevice,
619                        IN struct _DEVICE_OBJECT *TargetDevice);
620
621 BOOLEAN
622 AFSFastIoQueryNetworkOpenInfo( IN struct _FILE_OBJECT *FileObject,
623                                IN BOOLEAN Wait,
624                                OUT struct _FILE_NETWORK_OPEN_INFORMATION *Buffer,
625                                OUT struct _IO_STATUS_BLOCK *IoStatus,
626                                IN struct _DEVICE_OBJECT *DeviceObject);
627
628 BOOLEAN
629 AFSFastIoMdlRead( IN struct _FILE_OBJECT *FileObject,
630                   IN PLARGE_INTEGER FileOffset,
631                   IN ULONG Length,
632                   IN ULONG LockKey,
633                   OUT PMDL *MdlChain,
634                   OUT PIO_STATUS_BLOCK IoStatus,
635                   IN struct _DEVICE_OBJECT *DeviceObject);
636
637 BOOLEAN
638 AFSFastIoMdlReadComplete( IN struct _FILE_OBJECT *FileObject,
639                           IN PMDL MdlChain,
640                           IN struct _DEVICE_OBJECT *DeviceObject);
641
642 BOOLEAN
643 AFSFastIoPrepareMdlWrite( IN struct _FILE_OBJECT *FileObject,
644                           IN PLARGE_INTEGER FileOffset,
645                           IN ULONG Length,
646                           IN ULONG LockKey,
647                           OUT PMDL *MdlChain,
648                           OUT PIO_STATUS_BLOCK IoStatus,
649                           IN struct _DEVICE_OBJECT *DeviceObject);
650
651 BOOLEAN
652 AFSFastIoMdlWriteComplete( IN struct _FILE_OBJECT *FileObject,
653                            IN PLARGE_INTEGER FileOffset,
654                            IN PMDL MdlChain,
655                            IN struct _DEVICE_OBJECT *DeviceObject);
656
657 NTSTATUS
658 AFSFastIoAcquireForModWrite( IN struct _FILE_OBJECT *FileObject,
659                              IN PLARGE_INTEGER EndingOffset,
660                              OUT struct _ERESOURCE **ResourceToRelease,
661                              IN struct _DEVICE_OBJECT *DeviceObject);
662
663 NTSTATUS
664 AFSFastIoReleaseForModWrite( IN struct _FILE_OBJECT *FileObject,
665                              IN struct _ERESOURCE *ResourceToRelease,
666                              IN struct _DEVICE_OBJECT *DeviceObject);
667
668 NTSTATUS
669 AFSFastIoAcquireForCCFlush( IN struct _FILE_OBJECT *FileObject,
670                             IN struct _DEVICE_OBJECT *DeviceObject);
671
672 NTSTATUS
673 AFSFastIoReleaseForCCFlush( IN struct _FILE_OBJECT *FileObject,
674                             IN struct _DEVICE_OBJECT *DeviceObject);
675
676 BOOLEAN
677 AFSFastIoReadCompressed( IN struct _FILE_OBJECT *FileObject,
678                          IN PLARGE_INTEGER FileOffset,
679                          IN ULONG Length,
680                          IN ULONG LockKey,
681                          OUT PVOID Buffer,
682                          OUT PMDL *MdlChain,
683                          OUT PIO_STATUS_BLOCK IoStatus,
684                          OUT struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
685                          IN ULONG CompressedDataInfoLength,
686                          IN struct _DEVICE_OBJECT *DeviceObject);
687
688 BOOLEAN
689 AFSFastIoWriteCompressed( IN struct _FILE_OBJECT *FileObject,
690                           IN PLARGE_INTEGER FileOffset,
691                           IN ULONG Length,
692                           IN ULONG LockKey,
693                           IN PVOID Buffer,
694                           OUT PMDL *MdlChain,
695                           OUT PIO_STATUS_BLOCK IoStatus,
696                           IN struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
697                           IN ULONG CompressedDataInfoLength,
698                           IN struct _DEVICE_OBJECT *DeviceObject);
699
700 BOOLEAN
701 AFSFastIoMdlReadCompleteCompressed( IN struct _FILE_OBJECT *FileObject,
702                                     IN PMDL MdlChain,
703                                     IN struct _DEVICE_OBJECT *DeviceObject);
704
705 BOOLEAN
706 AFSFastIoMdlWriteCompleteCompressed( IN struct _FILE_OBJECT *FileObject,
707                                      IN PLARGE_INTEGER FileOffset,
708                                      IN PMDL MdlChain,
709                                      IN struct _DEVICE_OBJECT *DeviceObject);
710
711 BOOLEAN
712 AFSFastIoQueryOpen( IN struct _IRP *Irp,
713                     OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation,
714                     IN struct _DEVICE_OBJECT *DeviceObject);
715
716 //
717 // AFSLibrarySupport.cpp Prototypes
718 //
719
720 NTSTATUS
721 AFSLoadLibrary( IN ULONG Flags,
722                 IN UNICODE_STRING *ServicePath);
723
724 NTSTATUS
725 AFSUnloadLibrary( IN BOOLEAN CancelQueue);
726
727 NTSTATUS
728 AFSCheckLibraryState( IN PIRP Irp);
729
730 NTSTATUS
731 AFSClearLibraryRequest( void);
732
733 NTSTATUS
734 AFSQueueLibraryRequest( IN PIRP Irp);
735
736 NTSTATUS
737 AFSProcessQueuedResults( IN BOOLEAN CancelRequest);
738
739 NTSTATUS
740 AFSSubmitLibraryRequest( IN PIRP Irp);
741
742 NTSTATUS
743 AFSInitializeLibrary( IN AFSFileID *GlobalRootFid,
744                       IN BOOLEAN QueueRootEnumeration);
745
746 //
747 // AFSRDRSupport.cpp Prototypes
748 //
749
750 NTSTATUS
751 AFSInitRDRDevice( void);
752
753 NTSTATUS
754 AFSRDRDeviceControl( IN PDEVICE_OBJECT DeviceObject,
755                      IN PIRP Irp);
756
757 NTSTATUS
758 AFSInitializeRedirector( IN AFSRedirectorInitInfo *CacheFileInfo);
759
760 NTSTATUS
761 AFSCloseRedirector( void);
762
763 //
764 // AFSLogSupport.cpp
765 //
766
767 NTSTATUS
768 AFSDbgLogMsg( IN ULONG Subsystem,
769               IN ULONG Level,
770               IN PCCH Format,
771               ...);
772
773 NTSTATUS
774 AFSInitializeDbgLog( void);
775
776 NTSTATUS
777 AFSTearDownDbgLog( void);
778
779 NTSTATUS
780 AFSConfigureTrace( IN AFSTraceConfigCB *TraceInfo);
781
782 NTSTATUS
783 AFSGetTraceBuffer( IN ULONG TraceBufferLength,
784                    OUT void *TraceBuffer,
785                    OUT ULONG_PTR *CopiedLength);
786
787 void
788 AFSTagInitialLogEntry( void);
789
790 void
791 AFSDumpTraceFiles( void);
792
793 NTSTATUS
794 AFSInitializeDumpFile( void);
795
796 //
797 // AFSProcessSupport.cpp Prototypes
798 //
799
800 void
801 AFSProcessNotify( IN HANDLE  ParentId,
802                   IN HANDLE  ProcessId,
803                   IN BOOLEAN  Create);
804
805 void
806 AFSProcessNotifyEx( IN OUT PEPROCESS Process,
807                     IN     HANDLE ProcessId,
808                     IN OUT PPS_CREATE_NOTIFY_INFO CreateInfo);
809
810 void
811 AFSProcessCreate( IN HANDLE ParentId,
812                   IN HANDLE ProcessId,
813                   IN HANDLE CreatingProcessId,
814                   IN HANDLE CreatingThreadId);
815
816 void
817 AFSProcessDestroy( IN HANDLE ProcessId);
818
819 GUID *
820 AFSValidateProcessEntry( IN HANDLE  ProcessId,
821                          IN BOOLEAN bProcessTreeLocked);
822
823 BOOLEAN
824 AFSIs64BitProcess( IN ULONGLONG ProcessId);
825
826 AFSProcessCB *
827 AFSInitializeProcessCB( IN ULONGLONG ParentProcessId,
828                         IN ULONGLONG ProcessId);
829
830 AFSThreadCB *
831 AFSInitializeThreadCB( IN AFSProcessCB *ProcessCB,
832                        IN ULONGLONG ThreadId);
833
834 BOOLEAN
835 AFSIsUser( IN PSID Sid);
836
837 BOOLEAN
838 AFSIsInGroup(IN PSID Sid);
839
840 VOID
841 AFSRegisterService( void);
842
843 VOID
844 AFSDeregisterService( void);
845
846 BOOLEAN
847 AFSIsService( void);
848
849 };
850
851 #endif /* _AFS_COMMON_H */