e2b4643507fb78c6231f1ac900ca6eabd14a3139
[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 CHAR *FunctionString,
404                     IN ULONG Code,
405                     IN PEXCEPTION_POINTERS ExceptPtrs);
406
407 BOOLEAN
408 AFSAcquireExcl( IN PERESOURCE Resource,
409                 IN BOOLEAN wait);
410
411 BOOLEAN
412 AFSAcquireSharedStarveExclusive( IN PERESOURCE Resource,
413                                  IN BOOLEAN Wait);
414
415 BOOLEAN
416 AFSAcquireShared( IN PERESOURCE Resource,
417                   IN BOOLEAN wait);
418
419 void
420 AFSReleaseResource( IN PERESOURCE Resource);
421
422 void
423 AFSConvertToShared( IN PERESOURCE Resource);
424
425 void
426 AFSCompleteRequest( IN PIRP Irp,
427                     IN ULONG Status);
428
429 NTSTATUS
430 AFSReadRegistry( IN PUNICODE_STRING RegistryPath);
431
432 NTSTATUS
433 AFSUpdateRegistryParameter( IN PUNICODE_STRING ValueName,
434                             IN ULONG ValueType,
435                             IN void *ValueData,
436                             IN ULONG ValueDataLength);
437
438 NTSTATUS
439 AFSInitializeControlDevice( void);
440
441 NTSTATUS
442 AFSRemoveControlDevice( void);
443
444 NTSTATUS
445 AFSDefaultDispatch( IN PDEVICE_OBJECT DeviceObject,
446                     IN PIRP Irp);
447
448 NTSTATUS
449 AFSIrpComplete( IN PDEVICE_OBJECT DeviceObject,
450                 IN PIRP           Irp,
451                 IN PVOID          Context);
452
453 void
454 AFSInitServerStrings( void);
455
456 NTSTATUS
457 AFSReadServerName( void);
458
459 NTSTATUS
460 AFSSetSysNameInformation( IN AFSSysNameNotificationCB *SysNameInfo,
461                           IN ULONG SysNameInfoBufferLength);
462
463 void
464 AFSResetSysNameList( IN AFSSysNameCB *SysNameList);
465
466 NTSTATUS
467 AFSSendDeviceIoControl( IN DEVICE_OBJECT *TargetDeviceObject,
468                         IN ULONG IOControl,
469                         IN void *InputBuffer,
470                         IN ULONG InputBufferLength,
471                         IN OUT void *OutputBuffer,
472                         IN ULONG OutputBufferLength,
473                         OUT ULONG *ResultLength);
474
475 void *
476 AFSExAllocatePoolWithTag( IN POOL_TYPE  PoolType,
477                           IN SIZE_T  NumberOfBytes,
478                           IN ULONG  Tag);
479
480 void
481 AFSExFreePoolWithTag( IN void *Buffer, IN ULONG Tag);
482
483 NTSTATUS
484 AFSShutdownRedirector( void);
485
486 BOOLEAN
487 AFSAcquireFcbForLazyWrite( IN PVOID Fcb,
488                            IN BOOLEAN Wait);
489
490 VOID
491 AFSReleaseFcbFromLazyWrite( IN PVOID Fcb);
492
493 BOOLEAN
494 AFSAcquireFcbForReadAhead( IN PVOID Fcb,
495                            IN BOOLEAN Wait);
496
497 VOID
498 AFSReleaseFcbFromReadAhead( IN PVOID Fcb);
499
500 NTSTATUS
501 AFSGetCallerSID( OUT UNICODE_STRING *SIDString,
502                  OUT BOOLEAN *pbImpersonation);
503
504 ULONG
505 AFSGetSessionId( IN HANDLE ProcessId,
506                  OUT BOOLEAN *pbImpersonation);
507
508 NTSTATUS
509 AFSCheckThreadDacl( OUT GUID *AuthGroup);
510
511 NTSTATUS
512 AFSProcessSetProcessDacl( IN AFSProcessCB *ProcessCB);
513
514 //
515 // Prototypes in AFSFastIoSupprt.cpp
516 //
517
518 BOOLEAN
519 AFSFastIoCheckIfPossible( IN struct _FILE_OBJECT *FileObject,
520                           IN PLARGE_INTEGER FileOffset,
521                           IN ULONG Length,
522                           IN BOOLEAN Wait,
523                           IN ULONG LockKey,
524                           IN BOOLEAN CheckForReadOperation,
525                           OUT PIO_STATUS_BLOCK IoStatus,
526                           IN struct _DEVICE_OBJECT *DeviceObject);
527
528 BOOLEAN
529 AFSFastIoRead( IN struct _FILE_OBJECT *FileObject,
530                IN PLARGE_INTEGER FileOffset,
531                IN ULONG Length,
532                IN BOOLEAN Wait,
533                IN ULONG LockKey,
534                OUT PVOID Buffer,
535                OUT PIO_STATUS_BLOCK IoStatus,
536                IN struct _DEVICE_OBJECT *DeviceObject);
537
538 BOOLEAN
539 AFSFastIoWrite( IN struct _FILE_OBJECT *FileObject,
540                 IN PLARGE_INTEGER FileOffset,
541                 IN ULONG Length,
542                 IN BOOLEAN Wait,
543                 IN ULONG LockKey,
544                 IN PVOID Buffer,
545                 OUT PIO_STATUS_BLOCK IoStatus,
546                 IN struct _DEVICE_OBJECT *DeviceObject);
547
548 BOOLEAN
549 AFSFastIoQueryBasicInfo( IN struct _FILE_OBJECT *FileObject,
550                          IN BOOLEAN Wait,
551                          OUT PFILE_BASIC_INFORMATION Buffer,
552                          OUT PIO_STATUS_BLOCK IoStatus,
553                          IN struct _DEVICE_OBJECT *DeviceObject);
554
555 BOOLEAN
556 AFSFastIoQueryStandardInfo( IN struct _FILE_OBJECT *FileObject,
557                             IN BOOLEAN Wait,
558                             OUT PFILE_STANDARD_INFORMATION Buffer,
559                             OUT PIO_STATUS_BLOCK IoStatus,
560                             IN struct _DEVICE_OBJECT *DeviceObject);
561
562 BOOLEAN
563 AFSFastIoLock( IN struct _FILE_OBJECT *FileObject,
564                IN PLARGE_INTEGER FileOffset,
565                IN PLARGE_INTEGER Length,
566                IN PEPROCESS ProcessId,
567                IN ULONG Key,
568                IN BOOLEAN FailImmediately,
569                IN BOOLEAN ExclusiveLock,
570                OUT PIO_STATUS_BLOCK IoStatus,
571                IN struct _DEVICE_OBJECT *DeviceObject);
572
573 BOOLEAN
574 AFSFastIoUnlockSingle( IN struct _FILE_OBJECT *FileObject,
575                        IN PLARGE_INTEGER FileOffset,
576                        IN PLARGE_INTEGER Length,
577                        IN PEPROCESS ProcessId,
578                        IN ULONG Key,
579                        OUT PIO_STATUS_BLOCK IoStatus,
580                        IN struct _DEVICE_OBJECT *DeviceObject);
581
582 BOOLEAN
583 AFSFastIoUnlockAll( IN struct _FILE_OBJECT *FileObject,
584                     IN PEPROCESS ProcessId,
585                     OUT PIO_STATUS_BLOCK IoStatus,
586                     IN struct _DEVICE_OBJECT *DeviceObject);
587
588 BOOLEAN
589 AFSFastIoUnlockAllByKey( IN struct _FILE_OBJECT *FileObject,
590                          IN PVOID ProcessId,
591                          IN ULONG Key,
592                          OUT PIO_STATUS_BLOCK IoStatus,
593                          IN struct _DEVICE_OBJECT *DeviceObject);
594
595 BOOLEAN
596 AFSFastIoDevCtrl( IN struct _FILE_OBJECT *FileObject,
597                   IN BOOLEAN Wait,
598                   IN PVOID InputBuffer OPTIONAL,
599                   IN ULONG InputBufferLength,
600                   OUT PVOID OutputBuffer OPTIONAL,
601                   IN ULONG OutputBufferLength,
602                   IN ULONG IoControlCode,
603                   OUT PIO_STATUS_BLOCK IoStatus,
604                   IN struct _DEVICE_OBJECT *DeviceObject);
605
606 VOID
607 AFSFastIoAcquireFile( IN struct _FILE_OBJECT *FileObject);
608
609 VOID
610 AFSFastIoReleaseFile( IN struct _FILE_OBJECT *FileObject);
611
612 VOID
613 AFSFastIoDetachDevice( IN struct _DEVICE_OBJECT *SourceDevice,
614                        IN struct _DEVICE_OBJECT *TargetDevice);
615
616 BOOLEAN
617 AFSFastIoQueryNetworkOpenInfo( IN struct _FILE_OBJECT *FileObject,
618                                IN BOOLEAN Wait,
619                                OUT struct _FILE_NETWORK_OPEN_INFORMATION *Buffer,
620                                OUT struct _IO_STATUS_BLOCK *IoStatus,
621                                IN struct _DEVICE_OBJECT *DeviceObject);
622
623 BOOLEAN
624 AFSFastIoMdlRead( IN struct _FILE_OBJECT *FileObject,
625                   IN PLARGE_INTEGER FileOffset,
626                   IN ULONG Length,
627                   IN ULONG LockKey,
628                   OUT PMDL *MdlChain,
629                   OUT PIO_STATUS_BLOCK IoStatus,
630                   IN struct _DEVICE_OBJECT *DeviceObject);
631
632 BOOLEAN
633 AFSFastIoMdlReadComplete( IN struct _FILE_OBJECT *FileObject,
634                           IN PMDL MdlChain,
635                           IN struct _DEVICE_OBJECT *DeviceObject);
636
637 BOOLEAN
638 AFSFastIoPrepareMdlWrite( IN struct _FILE_OBJECT *FileObject,
639                           IN PLARGE_INTEGER FileOffset,
640                           IN ULONG Length,
641                           IN ULONG LockKey,
642                           OUT PMDL *MdlChain,
643                           OUT PIO_STATUS_BLOCK IoStatus,
644                           IN struct _DEVICE_OBJECT *DeviceObject);
645
646 BOOLEAN
647 AFSFastIoMdlWriteComplete( IN struct _FILE_OBJECT *FileObject,
648                            IN PLARGE_INTEGER FileOffset,
649                            IN PMDL MdlChain,
650                            IN struct _DEVICE_OBJECT *DeviceObject);
651
652 NTSTATUS
653 AFSFastIoAcquireForModWrite( IN struct _FILE_OBJECT *FileObject,
654                              IN PLARGE_INTEGER EndingOffset,
655                              OUT struct _ERESOURCE **ResourceToRelease,
656                              IN struct _DEVICE_OBJECT *DeviceObject);
657
658 NTSTATUS
659 AFSFastIoReleaseForModWrite( IN struct _FILE_OBJECT *FileObject,
660                              IN struct _ERESOURCE *ResourceToRelease,
661                              IN struct _DEVICE_OBJECT *DeviceObject);
662
663 NTSTATUS
664 AFSFastIoAcquireForCCFlush( IN struct _FILE_OBJECT *FileObject,
665                             IN struct _DEVICE_OBJECT *DeviceObject);
666
667 NTSTATUS
668 AFSFastIoReleaseForCCFlush( IN struct _FILE_OBJECT *FileObject,
669                             IN struct _DEVICE_OBJECT *DeviceObject);
670
671 BOOLEAN
672 AFSFastIoReadCompressed( IN struct _FILE_OBJECT *FileObject,
673                          IN PLARGE_INTEGER FileOffset,
674                          IN ULONG Length,
675                          IN ULONG LockKey,
676                          OUT PVOID Buffer,
677                          OUT PMDL *MdlChain,
678                          OUT PIO_STATUS_BLOCK IoStatus,
679                          OUT struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
680                          IN ULONG CompressedDataInfoLength,
681                          IN struct _DEVICE_OBJECT *DeviceObject);
682
683 BOOLEAN
684 AFSFastIoWriteCompressed( IN struct _FILE_OBJECT *FileObject,
685                           IN PLARGE_INTEGER FileOffset,
686                           IN ULONG Length,
687                           IN ULONG LockKey,
688                           IN PVOID Buffer,
689                           OUT PMDL *MdlChain,
690                           OUT PIO_STATUS_BLOCK IoStatus,
691                           IN struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
692                           IN ULONG CompressedDataInfoLength,
693                           IN struct _DEVICE_OBJECT *DeviceObject);
694
695 BOOLEAN
696 AFSFastIoMdlReadCompleteCompressed( IN struct _FILE_OBJECT *FileObject,
697                                     IN PMDL MdlChain,
698                                     IN struct _DEVICE_OBJECT *DeviceObject);
699
700 BOOLEAN
701 AFSFastIoMdlWriteCompleteCompressed( IN struct _FILE_OBJECT *FileObject,
702                                      IN PLARGE_INTEGER FileOffset,
703                                      IN PMDL MdlChain,
704                                      IN struct _DEVICE_OBJECT *DeviceObject);
705
706 BOOLEAN
707 AFSFastIoQueryOpen( IN struct _IRP *Irp,
708                     OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation,
709                     IN struct _DEVICE_OBJECT *DeviceObject);
710
711 //
712 // AFSLibrarySupport.cpp Prototypes
713 //
714
715 NTSTATUS
716 AFSLoadLibrary( IN ULONG Flags,
717                 IN UNICODE_STRING *ServicePath);
718
719 NTSTATUS
720 AFSUnloadLibrary( IN BOOLEAN CancelQueue);
721
722 NTSTATUS
723 AFSCheckLibraryState( IN PIRP Irp);
724
725 NTSTATUS
726 AFSClearLibraryRequest( void);
727
728 NTSTATUS
729 AFSQueueLibraryRequest( IN PIRP Irp);
730
731 NTSTATUS
732 AFSProcessQueuedResults( IN BOOLEAN CancelRequest);
733
734 NTSTATUS
735 AFSSubmitLibraryRequest( IN PIRP Irp);
736
737 NTSTATUS
738 AFSInitializeLibrary( IN AFSFileID *GlobalRootFid,
739                       IN BOOLEAN QueueRootEnumeration);
740
741 //
742 // AFSRDRSupport.cpp Prototypes
743 //
744
745 NTSTATUS
746 AFSInitRDRDevice( void);
747
748 NTSTATUS
749 AFSRDRDeviceControl( IN PDEVICE_OBJECT DeviceObject,
750                      IN PIRP Irp);
751
752 NTSTATUS
753 AFSInitializeRedirector( IN AFSRedirectorInitInfo *CacheFileInfo);
754
755 NTSTATUS
756 AFSCloseRedirector( void);
757
758 //
759 // AFSLogSupport.cpp
760 //
761
762 NTSTATUS
763 AFSDbgLogMsg( IN ULONG Subsystem,
764               IN ULONG Level,
765               IN PCCH Format,
766               ...);
767
768 NTSTATUS
769 AFSInitializeDbgLog( void);
770
771 NTSTATUS
772 AFSTearDownDbgLog( void);
773
774 NTSTATUS
775 AFSConfigureTrace( IN AFSTraceConfigCB *TraceInfo);
776
777 NTSTATUS
778 AFSGetTraceBuffer( IN ULONG TraceBufferLength,
779                    OUT void *TraceBuffer,
780                    OUT ULONG_PTR *CopiedLength);
781
782 void
783 AFSTagInitialLogEntry( void);
784
785 void
786 AFSDumpTraceFiles( void);
787
788 NTSTATUS
789 AFSInitializeDumpFile( void);
790
791 //
792 // AFSProcessSupport.cpp Prototypes
793 //
794
795 void
796 AFSProcessNotify( IN HANDLE  ParentId,
797                   IN HANDLE  ProcessId,
798                   IN BOOLEAN  Create);
799
800 void
801 AFSProcessNotifyEx( IN OUT PEPROCESS Process,
802                     IN     HANDLE ProcessId,
803                     IN OUT PPS_CREATE_NOTIFY_INFO CreateInfo);
804
805 void
806 AFSProcessCreate( IN HANDLE ParentId,
807                   IN HANDLE ProcessId,
808                   IN HANDLE CreatingProcessId,
809                   IN HANDLE CreatingThreadId);
810
811 void
812 AFSProcessDestroy( IN HANDLE ProcessId);
813
814 GUID *
815 AFSValidateProcessEntry( IN HANDLE ProcessId);
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 */