Windows: Refactor AFSProcessSupport
[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 void  *Data,
166                    IN ULONG DataLength,
167                    IN OUT void *ResultBuffer,
168                    IN OUT PULONG ResultBufferLength);
169
170 NTSTATUS
171 AFSProcessControlRequest( IN PIRP Irp);
172
173 NTSTATUS
174 AFSInitIrpPool( void);
175
176 void
177 AFSCleanupIrpPool( void);
178
179 NTSTATUS
180 AFSProcessIrpRequest( IN PIRP Irp);
181
182 NTSTATUS
183 AFSProcessIrpResult( IN PIRP Irp);
184
185 NTSTATUS
186 AFSInsertRequest( IN AFSCommSrvcCB *CommSrvc,
187                   IN AFSPoolEntry *Entry);
188
189 //
190 // AFSCreate.cpp Prototypes
191 //
192
193 NTSTATUS
194 AFSCreate( IN PDEVICE_OBJECT DeviceObject,
195            IN PIRP Irp);
196
197 NTSTATUS
198 AFSCommonCreate( IN PDEVICE_OBJECT DeviceObject,
199                  IN PIRP Irp);
200
201 NTSTATUS
202 AFSControlDeviceCreate( IN PIRP Irp);
203
204 NTSTATUS
205 AFSOpenRedirector( IN PIRP Irp);
206
207 NTSTATUS
208 AFSInitRdrFcb( OUT AFSFcb **RdrFcb);
209
210 void
211 AFSRemoveRdrFcb( IN OUT AFSFcb **RdrFcb);
212
213 //
214 // AFSClose.cpp Prototypes
215 //
216
217 NTSTATUS
218 AFSClose( IN PDEVICE_OBJECT DeviceObject,
219           IN PIRP Irp);
220
221 NTSTATUS
222 AFSCommonClose( IN PDEVICE_OBJECT DeviceObject,
223                 IN PIRP Irp);
224
225 //
226 // AFSNetworkProviderSupport.cpp
227 //
228
229 NTSTATUS
230 AFSAddConnectionEx( IN UNICODE_STRING *RemoteName,
231                     IN ULONG DisplayType,
232                     IN ULONG Flags);
233
234 void
235 AFSInitializeConnectionInfo( IN AFSProviderConnectionCB *Connection,
236                              IN ULONG DisplayType);
237
238 //
239 // AFSRead.cpp Prototypes
240 //
241
242 NTSTATUS
243 AFSRead( IN PDEVICE_OBJECT DeviceObject,
244          IN PIRP Irp);
245
246 //
247 // AFSWrite.cpp Prototypes
248 //
249
250 NTSTATUS
251 AFSWrite( IN PDEVICE_OBJECT DeviceObject,
252                 IN PIRP Irp);
253
254 //
255 // AFSFileInfo.cpp Prototypes
256 //
257
258 NTSTATUS
259 AFSQueryFileInfo( IN PDEVICE_OBJECT DeviceObject,
260                   IN PIRP Irp);
261
262 NTSTATUS
263 AFSSetFileInfo( IN PDEVICE_OBJECT DeviceObject,
264                 IN PIRP Irp);
265
266 //
267 // AFSEa.cpp Prototypes
268 //
269
270 NTSTATUS
271 AFSQueryEA( IN PDEVICE_OBJECT DeviceObject,
272             IN PIRP Irp);
273
274 NTSTATUS
275 AFSSetEA( IN PDEVICE_OBJECT DeviceObject,
276           IN PIRP Irp);
277
278 //
279 // AFSFlushBuffers.cpp Prototypes
280 //
281
282 NTSTATUS
283 AFSFlushBuffers( IN PDEVICE_OBJECT DeviceObject,
284                  IN PIRP Irp);
285
286 //
287 // AFSVolumeInfo.cpp Prototypes
288 //
289
290 NTSTATUS
291 AFSQueryVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
292                     IN PIRP Irp);
293
294 NTSTATUS
295 AFSSetVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
296                   IN PIRP Irp);
297
298 NTSTATUS
299 AFSSetVolumeInfo( IN PDEVICE_OBJECT DeviceObject,
300                   IN PIRP Irp);
301
302 //
303 // AFSDirControl.cpp Prototypes
304 //
305
306 NTSTATUS
307 AFSDirControl( IN PDEVICE_OBJECT DeviceObject,
308                IN PIRP Irp);
309
310 //
311 // AFSFSControl.cpp Prototypes
312 //
313
314 NTSTATUS
315 AFSFSControl( IN PDEVICE_OBJECT DeviceObject,
316               IN PIRP Irp);
317
318 //
319 // AFSDevControl.cpp Prototypes
320 //
321
322 NTSTATUS
323 AFSDevControl( IN PDEVICE_OBJECT DeviceObject,
324                IN PIRP Irp);
325
326 //
327 // AFSInternalDevControl.cpp Prototypes
328 //
329
330 NTSTATUS
331 AFSInternalDevControl( IN PDEVICE_OBJECT DeviceObject,
332                        IN PIRP Irp);
333
334 //
335 // AFSShutdown.cpp Prototypes
336 //
337
338 NTSTATUS
339 AFSShutdown( IN PDEVICE_OBJECT DeviceObject,
340              IN PIRP Irp);
341
342
343 NTSTATUS
344 AFSShutdownFilesystem( void);
345
346 //
347 // AFSLockControl.cpp Prototypes
348 //
349
350 NTSTATUS
351 AFSLockControl( IN PDEVICE_OBJECT DeviceObject,
352                 IN PIRP Irp);
353
354 //
355 // AFSCleanup.cpp Prototypes
356 //
357
358 NTSTATUS
359 AFSCleanup( IN PDEVICE_OBJECT DeviceObject,
360             IN PIRP Irp);
361
362 NTSTATUS
363 AFSCommonCleanup( IN PDEVICE_OBJECT DeviceObject,
364                   IN PIRP Irp);
365
366 //
367 // AFSSecurity.cpp Prototypes
368 //
369
370 NTSTATUS
371 AFSQuerySecurity( IN PDEVICE_OBJECT DeviceObject,
372                   IN PIRP Irp);
373
374 NTSTATUS
375 AFSSetSecurity( IN PDEVICE_OBJECT DeviceObject,
376                 IN PIRP Irp);
377
378 //
379 // AFSSystemControl.cpp Prototypes
380 //
381
382 NTSTATUS
383 AFSSystemControl( IN PDEVICE_OBJECT DeviceObject,
384                   IN PIRP Irp);
385
386 //
387 // AFSQuota.cpp Prototypes
388 //
389
390 NTSTATUS
391 AFSQueryQuota( IN PDEVICE_OBJECT DeviceObject,
392                IN PIRP Irp);
393
394 NTSTATUS
395 AFSSetQuota( IN PDEVICE_OBJECT DeviceObject,
396              IN PIRP Irp);
397
398 //
399 // AFSGeneric.cpp Prototypes
400 //
401
402 ULONG
403 AFSExceptionFilter( IN ULONG Code,
404                     IN PEXCEPTION_POINTERS ExceptPtrs);
405
406 BOOLEAN
407 AFSAcquireExcl( IN PERESOURCE Resource,
408                 IN BOOLEAN wait);
409
410 BOOLEAN
411 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
412                                  IN BOOLEAN Wait);
413
414 BOOLEAN
415 AFSAcquireShared( IN PERESOURCE Resource,
416                   IN BOOLEAN wait);
417
418 void
419 AFSReleaseResource( IN PERESOURCE Resource);
420
421 void
422 AFSConvertToShared( IN PERESOURCE Resource);
423
424 void
425 AFSCompleteRequest( IN PIRP Irp,
426                     IN ULONG Status);
427
428 NTSTATUS
429 AFSReadRegistry( IN PUNICODE_STRING RegistryPath);
430
431 NTSTATUS
432 AFSUpdateRegistryParameter( IN PUNICODE_STRING ValueName,
433                             IN ULONG ValueType,
434                             IN void *ValueData,
435                             IN ULONG ValueDataLength);
436
437 NTSTATUS
438 AFSInitializeControlDevice( void);
439
440 NTSTATUS
441 AFSRemoveControlDevice( void);
442
443 NTSTATUS
444 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
445                     IN PIRP Irp);
446
447 NTSTATUS
448 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
449                 IN PIRP           Irp,
450                 IN PVOID          Context);
451
452 void
453 AFSInitServerStrings( void);
454
455 NTSTATUS
456 AFSReadServerName( void);
457
458 NTSTATUS
459 AFSSetSysNameInformation( IN AFSSysNameNotificationCB *SysNameInfo,
460                           IN ULONG SysNameInfoBufferLength);
461
462 void
463 AFSResetSysNameList( IN AFSSysNameCB *SysNameList);
464
465 NTSTATUS
466 AFSSendDeviceIoControl( IN DEVICE_OBJECT *TargetDeviceObject,
467                         IN ULONG IOControl,
468                         IN void *InputBuffer,
469                         IN ULONG InputBufferLength,
470                         IN OUT void *OutputBuffer,
471                         IN ULONG OutputBufferLength,
472                         OUT ULONG *ResultLength);
473
474 void *
475 AFSExAllocatePoolWithTag( IN POOL_TYPE  PoolType,
476                           IN SIZE_T  NumberOfBytes,
477                           IN ULONG  Tag);
478
479 void
480 AFSExFreePool( IN void *Buffer);
481
482 NTSTATUS
483 AFSShutdownRedirector( void);
484
485 BOOLEAN
486 AFSAcquireFcbForLazyWrite( IN PVOID Fcb,
487                            IN BOOLEAN Wait);
488
489 VOID
490 AFSReleaseFcbFromLazyWrite( IN PVOID Fcb);
491
492 BOOLEAN
493 AFSAcquireFcbForReadAhead( IN PVOID Fcb,
494                            IN BOOLEAN Wait);
495
496 VOID
497 AFSReleaseFcbFromReadAhead( IN PVOID Fcb);
498
499 NTSTATUS
500 AFSGetCallerSID( OUT UNICODE_STRING *SIDString,
501                  OUT BOOLEAN *pbImpersonation);
502
503 ULONG
504 AFSGetSessionId( IN HANDLE ProcessId,
505                  OUT BOOLEAN *pbImpersonation);
506
507 NTSTATUS
508 AFSCheckThreadDacl( OUT GUID *AuthGroup);
509
510 NTSTATUS
511 AFSProcessSetProcessDacl( IN AFSProcessCB *ProcessCB);
512
513 //
514 // Prototypes in AFSFastIoSupprt.cpp
515 //
516
517 BOOLEAN
518 AFSFastIoCheckIfPossible( IN struct _FILE_OBJECT *FileObject,
519                           IN PLARGE_INTEGER FileOffset,
520                           IN ULONG Length,
521                           IN BOOLEAN Wait,
522                           IN ULONG LockKey,
523                           IN BOOLEAN CheckForReadOperation,
524                           OUT PIO_STATUS_BLOCK IoStatus,
525                           IN struct _DEVICE_OBJECT *DeviceObject);
526
527 BOOLEAN
528 AFSFastIoRead( IN struct _FILE_OBJECT *FileObject,
529                IN PLARGE_INTEGER FileOffset,
530                IN ULONG Length,
531                IN BOOLEAN Wait,
532                IN ULONG LockKey,
533                OUT PVOID Buffer,
534                OUT PIO_STATUS_BLOCK IoStatus,
535                IN struct _DEVICE_OBJECT *DeviceObject);
536
537 BOOLEAN
538 AFSFastIoWrite( IN struct _FILE_OBJECT *FileObject,
539                 IN PLARGE_INTEGER FileOffset,
540                 IN ULONG Length,
541                 IN BOOLEAN Wait,
542                 IN ULONG LockKey,
543                 IN PVOID Buffer,
544                 OUT PIO_STATUS_BLOCK IoStatus,
545                 IN struct _DEVICE_OBJECT *DeviceObject);
546
547 BOOLEAN
548 AFSFastIoQueryBasicInfo( IN struct _FILE_OBJECT *FileObject,
549                          IN BOOLEAN Wait,
550                          OUT PFILE_BASIC_INFORMATION Buffer,
551                          OUT PIO_STATUS_BLOCK IoStatus,
552                          IN struct _DEVICE_OBJECT *DeviceObject);
553
554 BOOLEAN
555 AFSFastIoQueryStandardInfo( IN struct _FILE_OBJECT *FileObject,
556                             IN BOOLEAN Wait,
557                             OUT PFILE_STANDARD_INFORMATION Buffer,
558                             OUT PIO_STATUS_BLOCK IoStatus,
559                             IN struct _DEVICE_OBJECT *DeviceObject);
560
561 BOOLEAN
562 AFSFastIoLock( IN struct _FILE_OBJECT *FileObject,
563                IN PLARGE_INTEGER FileOffset,
564                IN PLARGE_INTEGER Length,
565                IN PEPROCESS ProcessId,
566                IN ULONG Key,
567                IN BOOLEAN FailImmediately,
568                IN BOOLEAN ExclusiveLock,
569                OUT PIO_STATUS_BLOCK IoStatus,
570                IN struct _DEVICE_OBJECT *DeviceObject);
571
572 BOOLEAN
573 AFSFastIoUnlockSingle( IN struct _FILE_OBJECT *FileObject,
574                        IN PLARGE_INTEGER FileOffset,
575                        IN PLARGE_INTEGER Length,
576                        IN PEPROCESS ProcessId,
577                        IN ULONG Key,
578                        OUT PIO_STATUS_BLOCK IoStatus,
579                        IN struct _DEVICE_OBJECT *DeviceObject);
580
581 BOOLEAN
582 AFSFastIoUnlockAll( IN struct _FILE_OBJECT *FileObject,
583                     IN PEPROCESS ProcessId,
584                     OUT PIO_STATUS_BLOCK IoStatus,
585                     IN struct _DEVICE_OBJECT *DeviceObject);
586
587 BOOLEAN
588 AFSFastIoUnlockAllByKey( IN struct _FILE_OBJECT *FileObject,
589                          IN PVOID ProcessId,
590                          IN ULONG Key,
591                          OUT PIO_STATUS_BLOCK IoStatus,
592                          IN struct _DEVICE_OBJECT *DeviceObject);
593
594 BOOLEAN
595 AFSFastIoDevCtrl( IN struct _FILE_OBJECT *FileObject,
596                   IN BOOLEAN Wait,
597                   IN PVOID InputBuffer OPTIONAL,
598                   IN ULONG InputBufferLength,
599                   OUT PVOID OutputBuffer OPTIONAL,
600                   IN ULONG OutputBufferLength,
601                   IN ULONG IoControlCode,
602                   OUT PIO_STATUS_BLOCK IoStatus,
603                   IN struct _DEVICE_OBJECT *DeviceObject);
604
605 VOID
606 AFSFastIoAcquireFile( IN struct _FILE_OBJECT *FileObject);
607
608 VOID
609 AFSFastIoReleaseFile( IN struct _FILE_OBJECT *FileObject);
610
611 VOID
612 AFSFastIoDetachDevice( IN struct _DEVICE_OBJECT *SourceDevice,
613                        IN struct _DEVICE_OBJECT *TargetDevice);
614
615 BOOLEAN
616 AFSFastIoQueryNetworkOpenInfo( IN struct _FILE_OBJECT *FileObject,
617                                IN BOOLEAN Wait,
618                                OUT struct _FILE_NETWORK_OPEN_INFORMATION *Buffer,
619                                OUT struct _IO_STATUS_BLOCK *IoStatus,
620                                IN struct _DEVICE_OBJECT *DeviceObject);
621
622 BOOLEAN
623 AFSFastIoMdlRead( IN struct _FILE_OBJECT *FileObject,
624                   IN PLARGE_INTEGER FileOffset,
625                   IN ULONG Length,
626                   IN ULONG LockKey,
627                   OUT PMDL *MdlChain,
628                   OUT PIO_STATUS_BLOCK IoStatus,
629                   IN struct _DEVICE_OBJECT *DeviceObject);
630
631 BOOLEAN
632 AFSFastIoMdlReadComplete( IN struct _FILE_OBJECT *FileObject,
633                           IN PMDL MdlChain,
634                           IN struct _DEVICE_OBJECT *DeviceObject);
635
636 BOOLEAN
637 AFSFastIoPrepareMdlWrite( IN struct _FILE_OBJECT *FileObject,
638                           IN PLARGE_INTEGER FileOffset,
639                           IN ULONG Length,
640                           IN ULONG LockKey,
641                           OUT PMDL *MdlChain,
642                           OUT PIO_STATUS_BLOCK IoStatus,
643                           IN struct _DEVICE_OBJECT *DeviceObject);
644
645 BOOLEAN
646 AFSFastIoMdlWriteComplete( IN struct _FILE_OBJECT *FileObject,
647                            IN PLARGE_INTEGER FileOffset,
648                            IN PMDL MdlChain,
649                            IN struct _DEVICE_OBJECT *DeviceObject);
650
651 NTSTATUS
652 AFSFastIoAcquireForModWrite( IN struct _FILE_OBJECT *FileObject,
653                              IN PLARGE_INTEGER EndingOffset,
654                              OUT struct _ERESOURCE **ResourceToRelease,
655                              IN struct _DEVICE_OBJECT *DeviceObject);
656
657 NTSTATUS
658 AFSFastIoReleaseForModWrite( IN struct _FILE_OBJECT *FileObject,
659                              IN struct _ERESOURCE *ResourceToRelease,
660                              IN struct _DEVICE_OBJECT *DeviceObject);
661
662 NTSTATUS
663 AFSFastIoAcquireForCCFlush( IN struct _FILE_OBJECT *FileObject,
664                             IN struct _DEVICE_OBJECT *DeviceObject);
665
666 NTSTATUS
667 AFSFastIoReleaseForCCFlush( IN struct _FILE_OBJECT *FileObject,
668                             IN struct _DEVICE_OBJECT *DeviceObject);
669
670 BOOLEAN
671 AFSFastIoReadCompressed( IN struct _FILE_OBJECT *FileObject,
672                          IN PLARGE_INTEGER FileOffset,
673                          IN ULONG Length,
674                          IN ULONG LockKey,
675                          OUT PVOID Buffer,
676                          OUT PMDL *MdlChain,
677                          OUT PIO_STATUS_BLOCK IoStatus,
678                          OUT struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
679                          IN ULONG CompressedDataInfoLength,
680                          IN struct _DEVICE_OBJECT *DeviceObject);
681
682 BOOLEAN
683 AFSFastIoWriteCompressed( IN struct _FILE_OBJECT *FileObject,
684                           IN PLARGE_INTEGER FileOffset,
685                           IN ULONG Length,
686                           IN ULONG LockKey,
687                           IN PVOID Buffer,
688                           OUT PMDL *MdlChain,
689                           OUT PIO_STATUS_BLOCK IoStatus,
690                           IN struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
691                           IN ULONG CompressedDataInfoLength,
692                           IN struct _DEVICE_OBJECT *DeviceObject);
693
694 BOOLEAN
695 AFSFastIoMdlReadCompleteCompressed( IN struct _FILE_OBJECT *FileObject,
696                                     IN PMDL MdlChain,
697                                     IN struct _DEVICE_OBJECT *DeviceObject);
698
699 BOOLEAN
700 AFSFastIoMdlWriteCompleteCompressed( IN struct _FILE_OBJECT *FileObject,
701                                      IN PLARGE_INTEGER FileOffset,
702                                      IN PMDL MdlChain,
703                                      IN struct _DEVICE_OBJECT *DeviceObject);
704
705 BOOLEAN
706 AFSFastIoQueryOpen( IN struct _IRP *Irp,
707                     OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation,
708                     IN struct _DEVICE_OBJECT *DeviceObject);
709
710 //
711 // AFSLibrarySupport.cpp Prototypes
712 //
713
714 NTSTATUS
715 AFSLoadLibrary( IN ULONG Flags,
716                 IN UNICODE_STRING *ServicePath);
717
718 NTSTATUS
719 AFSUnloadLibrary( IN BOOLEAN CancelQueue);
720
721 NTSTATUS
722 AFSCheckLibraryState( IN PIRP Irp);
723
724 NTSTATUS
725 AFSClearLibraryRequest( void);
726
727 NTSTATUS
728 AFSQueueLibraryRequest( IN PIRP Irp);
729
730 NTSTATUS
731 AFSProcessQueuedResults( IN BOOLEAN CancelRequest);
732
733 NTSTATUS
734 AFSSubmitLibraryRequest( IN PIRP Irp);
735
736 NTSTATUS
737 AFSInitializeLibrary( IN AFSFileID *GlobalRootFid,
738                       IN BOOLEAN QueueRootEnumeration);
739
740 //
741 // AFSRDRSupport.cpp Prototypes
742 //
743
744 NTSTATUS
745 AFSInitRDRDevice( void);
746
747 NTSTATUS
748 AFSRDRDeviceControl( IN PDEVICE_OBJECT DeviceObject,
749                      IN PIRP Irp);
750
751 NTSTATUS
752 AFSInitializeRedirector( IN AFSRedirectorInitInfo *CacheFileInfo);
753
754 NTSTATUS
755 AFSCloseRedirector( void);
756
757 //
758 // AFSLogSupport.cpp
759 //
760
761 NTSTATUS
762 AFSDbgLogMsg( IN ULONG Subsystem,
763               IN ULONG Level,
764               IN PCCH Format,
765               ...);
766
767 NTSTATUS
768 AFSInitializeDbgLog( void);
769
770 NTSTATUS
771 AFSTearDownDbgLog( void);
772
773 NTSTATUS
774 AFSConfigureTrace( IN AFSTraceConfigCB *TraceInfo);
775
776 NTSTATUS
777 AFSGetTraceBuffer( IN ULONG TraceBufferLength,
778                    OUT void *TraceBuffer,
779                    OUT ULONG_PTR *CopiedLength);
780
781 void
782 AFSTagInitialLogEntry( void);
783
784 void
785 AFSDumpTraceFiles( void);
786
787 NTSTATUS
788 AFSInitializeDumpFile( void);
789
790 //
791 // AFSProcessSupport.cpp Prototypes
792 //
793
794 void
795 AFSProcessNotify( IN HANDLE  ParentId,
796                   IN HANDLE  ProcessId,
797                   IN BOOLEAN  Create);
798
799 void
800 AFSProcessNotifyEx( IN OUT PEPROCESS Process,
801                     IN     HANDLE ProcessId,
802                     IN OUT PPS_CREATE_NOTIFY_INFO CreateInfo);
803
804 void
805 AFSProcessCreate( IN HANDLE ParentId,
806                   IN HANDLE ProcessId,
807                   IN HANDLE CreatingProcessId,
808                   IN HANDLE CreatingThreadId);
809
810 void
811 AFSProcessDestroy( IN HANDLE ParentId,
812                    IN HANDLE ProcessId);
813
814 GUID *
815 AFSValidateProcessEntry( void);
816
817 BOOLEAN
818 AFSIs64BitProcess( IN ULONGLONG ProcessId);
819
820 AFSProcessCB *
821 AFSInitializeProcessCB( IN ULONGLONG ParentProcessId,
822                         IN ULONGLONG ProcessId);
823
824 AFSThreadCB *
825 AFSInitializeThreadCB( IN AFSProcessCB *ProcessCB,
826                        IN ULONGLONG ThreadId);
827
828 };
829
830 #endif /* _AFS_COMMON_H */