Windows: Use %p for ptrs in redirector trace messages
[openafs.git] / src / WINNT / afsrdr / kernel / fs / AFSSecurity.cpp
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 //
36 // File: AFSSecurity.cpp
37 //
38
39 #include "AFSCommon.h"
40
41 NTSTATUS
42 AFSSetSecurity( IN PDEVICE_OBJECT DeviceObject,
43                 IN PIRP Irp)
44 {
45
46     NTSTATUS ntStatus = STATUS_NOT_SUPPORTED;
47     IO_STACK_LOCATION *pIrpSp;
48     AFSDeviceExt *pControlDeviceExt = (AFSDeviceExt *)AFSDeviceObject->DeviceExtension;
49     AFSFcb* pFcb = NULL;
50
51     pIrpSp = IoGetCurrentIrpStackLocation( Irp);
52
53     __try
54     {
55
56         AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
57                       AFS_TRACE_LEVEL_VERBOSE,
58                       "AFSSetSecurity Entry for FO %p\n",
59                       pIrpSp->FileObject);
60
61         if( DeviceObject == AFSDeviceObject)
62         {
63
64             ntStatus = STATUS_INVALID_DEVICE_REQUEST;
65
66             AFSCompleteRequest( Irp,
67                                 ntStatus);
68
69             try_return( ntStatus);
70         }
71
72         pFcb = (AFSFcb*) pIrpSp->FileObject->FsContext;
73
74         if( pFcb == NULL ||
75             pFcb->Header.NodeTypeCode == AFS_REDIRECTOR_FCB)
76         {
77
78             //
79             // Root open
80             //
81
82             ntStatus = STATUS_INVALID_DEVICE_REQUEST;
83
84             AFSCompleteRequest( Irp,
85                                 ntStatus);
86
87             try_return( ntStatus);
88         }
89
90         //
91         // Check the state of the library
92         //
93
94         ntStatus = AFSCheckLibraryState( Irp);
95
96         if( !NT_SUCCESS( ntStatus) ||
97             ntStatus == STATUS_PENDING)
98         {
99
100             if( ntStatus != STATUS_PENDING)
101             {
102                 AFSCompleteRequest( Irp, ntStatus);
103             }
104
105             try_return( ntStatus);
106         }
107
108         IoSkipCurrentIrpStackLocation( Irp);
109
110         ntStatus = IoCallDriver( pControlDeviceExt->Specific.Control.LibraryDeviceObject,
111                                  Irp);
112
113         //
114         // Indicate the library is done with the request
115         //
116
117         AFSClearLibraryRequest();
118
119 try_exit:
120
121         NOTHING;
122     }
123     __except( AFSExceptionFilter( __FUNCTION__, GetExceptionCode(), GetExceptionInformation()) )
124     {
125
126         AFSDbgLogMsg( 0,
127                       0,
128                       "EXCEPTION - AFSSetSecurity\n");
129
130         AFSDumpTraceFilesFnc();
131     }
132
133     return ntStatus;
134 }
135
136 NTSTATUS
137 AFSQuerySecurity( IN PDEVICE_OBJECT DeviceObject,
138                   IN PIRP Irp)
139 {
140
141     NTSTATUS ntStatus = STATUS_NOT_SUPPORTED;
142     IO_STACK_LOCATION *pIrpSp;
143     AFSDeviceExt *pControlDeviceExt = (AFSDeviceExt *)AFSDeviceObject->DeviceExtension;
144     AFSFcb* pFcb = NULL;
145
146     pIrpSp = IoGetCurrentIrpStackLocation( Irp);
147
148     __try
149     {
150
151         AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
152                       AFS_TRACE_LEVEL_VERBOSE,
153                       "AFSQuerySecurity Entry for FO %p\n",
154                       pIrpSp->FileObject);
155
156         if( DeviceObject == AFSDeviceObject)
157         {
158
159             ntStatus = STATUS_INVALID_DEVICE_REQUEST;
160
161             AFSCompleteRequest( Irp,
162                                 ntStatus);
163
164             try_return( ntStatus);
165         }
166
167         pFcb = (AFSFcb*) pIrpSp->FileObject->FsContext;
168
169         if( pFcb == NULL ||
170             pFcb->Header.NodeTypeCode == AFS_REDIRECTOR_FCB)
171         {
172
173             //
174             // Root open
175             //
176
177             ntStatus = STATUS_INVALID_DEVICE_REQUEST;
178
179             AFSCompleteRequest( Irp,
180                                 ntStatus);
181
182             try_return( ntStatus);
183         }
184
185         //
186         // Check the state of the library
187         //
188
189         ntStatus = AFSCheckLibraryState( Irp);
190
191         if( !NT_SUCCESS( ntStatus) ||
192             ntStatus == STATUS_PENDING)
193         {
194
195             if( ntStatus != STATUS_PENDING)
196             {
197                 AFSCompleteRequest( Irp, ntStatus);
198             }
199
200             try_return( ntStatus);
201         }
202
203         IoSkipCurrentIrpStackLocation( Irp);
204
205         ntStatus = IoCallDriver( pControlDeviceExt->Specific.Control.LibraryDeviceObject,
206                                  Irp);
207
208         //
209         // Indicate the library is done with the request
210         //
211
212         AFSClearLibraryRequest();
213
214 try_exit:
215
216         NOTHING;
217     }
218     __except( AFSExceptionFilter( __FUNCTION__, GetExceptionCode(), GetExceptionInformation()) )
219     {
220
221         AFSDbgLogMsg( 0,
222                       0,
223                       "EXCEPTION - AFSQuerySecurity\n");
224
225         AFSDumpTraceFilesFnc();
226     }
227
228     return ntStatus;
229 }