Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenaudit.c
Go to the documentation of this file.
00001 /* $Id: audit.c 53225 2011-08-14 11:31:23Z akhaldi $ 00002 * 00003 * COPYRIGHT: See COPYING in the top level directory 00004 * PROJECT: ReactOS system libraries 00005 * FILE: lib/advapi32/sec/audit.c 00006 * PURPOSE: Audit functions 00007 * PROGRAMMER: Eric Kohl 00008 * UPDATE HISTORY: 00009 * Created 07/19/2003 00010 */ 00011 00012 /* INCLUDES *****************************************************************/ 00013 00014 #include <advapi32.h> 00015 WINE_DEFAULT_DEBUG_CHANNEL(advapi); 00016 00017 /* FUNCTIONS ****************************************************************/ 00018 00019 /* 00020 * @implemented 00021 */ 00022 BOOL WINAPI 00023 AccessCheckAndAuditAlarmA(LPCSTR SubsystemName, 00024 LPVOID HandleId, 00025 LPSTR ObjectTypeName, 00026 LPSTR ObjectName, 00027 PSECURITY_DESCRIPTOR SecurityDescriptor, 00028 DWORD DesiredAccess, 00029 PGENERIC_MAPPING GenericMapping, 00030 BOOL ObjectCreation, 00031 LPDWORD GrantedAccess, 00032 LPBOOL AccessStatus, 00033 LPBOOL pfGenerateOnClose) 00034 { 00035 UNICODE_STRING SubsystemNameU; 00036 UNICODE_STRING ObjectTypeNameU; 00037 UNICODE_STRING ObjectNameU; 00038 NTSTATUS LocalAccessStatus; 00039 BOOLEAN GenerateOnClose; 00040 NTSTATUS Status; 00041 00042 RtlCreateUnicodeStringFromAsciiz(&SubsystemNameU, 00043 (PCHAR)SubsystemName); 00044 RtlCreateUnicodeStringFromAsciiz(&ObjectTypeNameU, 00045 (PCHAR)ObjectTypeName); 00046 RtlCreateUnicodeStringFromAsciiz(&ObjectNameU, 00047 (PCHAR)ObjectName); 00048 00049 Status = NtAccessCheckAndAuditAlarm(&SubsystemNameU, 00050 HandleId, 00051 &ObjectTypeNameU, 00052 &ObjectNameU, 00053 SecurityDescriptor, 00054 DesiredAccess, 00055 GenericMapping, 00056 ObjectCreation, 00057 GrantedAccess, 00058 &LocalAccessStatus, 00059 &GenerateOnClose); 00060 RtlFreeUnicodeString(&SubsystemNameU); 00061 RtlFreeUnicodeString(&ObjectTypeNameU); 00062 RtlFreeUnicodeString(&ObjectNameU); 00063 00064 *pfGenerateOnClose = (BOOL)GenerateOnClose; 00065 00066 if (!NT_SUCCESS(Status)) 00067 { 00068 SetLastError(RtlNtStatusToDosError(Status)); 00069 return FALSE; 00070 } 00071 00072 if (!NT_SUCCESS (LocalAccessStatus)) 00073 { 00074 *AccessStatus = FALSE; 00075 SetLastError(RtlNtStatusToDosError(Status)); 00076 return FALSE; 00077 } 00078 00079 *AccessStatus = TRUE; 00080 00081 return TRUE; 00082 } 00083 00084 00085 /* 00086 * @implemented 00087 */ 00088 BOOL WINAPI 00089 AccessCheckAndAuditAlarmW(LPCWSTR SubsystemName, 00090 LPVOID HandleId, 00091 LPWSTR ObjectTypeName, 00092 LPWSTR ObjectName, 00093 PSECURITY_DESCRIPTOR SecurityDescriptor, 00094 DWORD DesiredAccess, 00095 PGENERIC_MAPPING GenericMapping, 00096 BOOL ObjectCreation, 00097 LPDWORD GrantedAccess, 00098 LPBOOL AccessStatus, 00099 LPBOOL pfGenerateOnClose) 00100 { 00101 UNICODE_STRING SubsystemNameU; 00102 UNICODE_STRING ObjectTypeNameU; 00103 UNICODE_STRING ObjectNameU; 00104 NTSTATUS LocalAccessStatus; 00105 BOOLEAN GenerateOnClose; 00106 NTSTATUS Status; 00107 00108 RtlInitUnicodeString(&SubsystemNameU, 00109 (PWSTR)SubsystemName); 00110 RtlInitUnicodeString(&ObjectTypeNameU, 00111 (PWSTR)ObjectTypeName); 00112 RtlInitUnicodeString(&ObjectNameU, 00113 (PWSTR)ObjectName); 00114 00115 Status = NtAccessCheckAndAuditAlarm(&SubsystemNameU, 00116 HandleId, 00117 &ObjectTypeNameU, 00118 &ObjectNameU, 00119 SecurityDescriptor, 00120 DesiredAccess, 00121 GenericMapping, 00122 ObjectCreation, 00123 GrantedAccess, 00124 &LocalAccessStatus, 00125 &GenerateOnClose); 00126 00127 *pfGenerateOnClose = (BOOL)GenerateOnClose; 00128 00129 if (!NT_SUCCESS(Status)) 00130 { 00131 SetLastError(RtlNtStatusToDosError(Status)); 00132 return FALSE; 00133 } 00134 00135 if (!NT_SUCCESS(LocalAccessStatus)) 00136 { 00137 *AccessStatus = FALSE; 00138 SetLastError(RtlNtStatusToDosError(Status)); 00139 return FALSE; 00140 } 00141 00142 *AccessStatus = TRUE; 00143 00144 return TRUE; 00145 } 00146 00147 00148 /* 00149 * @implemented 00150 */ 00151 BOOL WINAPI 00152 ObjectCloseAuditAlarmA(LPCSTR SubsystemName, 00153 LPVOID HandleId, 00154 BOOL GenerateOnClose) 00155 { 00156 UNICODE_STRING Name; 00157 NTSTATUS Status; 00158 00159 Status = RtlCreateUnicodeStringFromAsciiz(&Name, 00160 (PCHAR)SubsystemName); 00161 if (!NT_SUCCESS(Status)) 00162 { 00163 SetLastError(RtlNtStatusToDosError(Status)); 00164 return FALSE; 00165 } 00166 00167 Status = NtCloseObjectAuditAlarm(&Name, 00168 HandleId, 00169 GenerateOnClose); 00170 RtlFreeUnicodeString(&Name); 00171 if (!NT_SUCCESS (Status)) 00172 { 00173 SetLastError(RtlNtStatusToDosError(Status)); 00174 return FALSE; 00175 } 00176 00177 return TRUE; 00178 } 00179 00180 00181 /* 00182 * @implemented 00183 */ 00184 BOOL WINAPI 00185 ObjectCloseAuditAlarmW(LPCWSTR SubsystemName, 00186 LPVOID HandleId, 00187 BOOL GenerateOnClose) 00188 { 00189 UNICODE_STRING Name; 00190 NTSTATUS Status; 00191 00192 RtlInitUnicodeString(&Name, 00193 (PWSTR)SubsystemName); 00194 00195 Status = NtCloseObjectAuditAlarm(&Name, 00196 HandleId, 00197 GenerateOnClose); 00198 if (!NT_SUCCESS(Status)) 00199 { 00200 SetLastError(RtlNtStatusToDosError(Status)); 00201 return FALSE; 00202 } 00203 00204 return TRUE; 00205 } 00206 00207 00208 /* 00209 * @implemented 00210 */ 00211 BOOL WINAPI 00212 ObjectDeleteAuditAlarmA(LPCSTR SubsystemName, 00213 LPVOID HandleId, 00214 BOOL GenerateOnClose) 00215 { 00216 UNICODE_STRING Name; 00217 NTSTATUS Status; 00218 00219 Status = RtlCreateUnicodeStringFromAsciiz(&Name, 00220 (PCHAR)SubsystemName); 00221 if (!NT_SUCCESS(Status)) 00222 { 00223 SetLastError(RtlNtStatusToDosError(Status)); 00224 return FALSE; 00225 } 00226 00227 Status = NtDeleteObjectAuditAlarm(&Name, 00228 HandleId, 00229 GenerateOnClose); 00230 RtlFreeUnicodeString(&Name); 00231 if (!NT_SUCCESS(Status)) 00232 { 00233 SetLastError(RtlNtStatusToDosError(Status)); 00234 return FALSE; 00235 } 00236 00237 return TRUE; 00238 } 00239 00240 00241 /* 00242 * @implemented 00243 */ 00244 BOOL WINAPI 00245 ObjectDeleteAuditAlarmW(LPCWSTR SubsystemName, 00246 LPVOID HandleId, 00247 BOOL GenerateOnClose) 00248 { 00249 UNICODE_STRING Name; 00250 NTSTATUS Status; 00251 00252 RtlInitUnicodeString(&Name, 00253 (PWSTR)SubsystemName); 00254 00255 Status = NtDeleteObjectAuditAlarm(&Name, 00256 HandleId, 00257 GenerateOnClose); 00258 if (!NT_SUCCESS(Status)) 00259 { 00260 SetLastError(RtlNtStatusToDosError(Status)); 00261 return FALSE; 00262 } 00263 00264 return TRUE; 00265 } 00266 00267 00268 /* 00269 * @implemented 00270 */ 00271 BOOL WINAPI 00272 ObjectOpenAuditAlarmA(LPCSTR SubsystemName, 00273 LPVOID HandleId, 00274 LPSTR ObjectTypeName, 00275 LPSTR ObjectName, 00276 PSECURITY_DESCRIPTOR pSecurityDescriptor, 00277 HANDLE ClientToken, 00278 DWORD DesiredAccess, 00279 DWORD GrantedAccess, 00280 PPRIVILEGE_SET Privileges, 00281 BOOL ObjectCreation, 00282 BOOL AccessGranted, 00283 LPBOOL GenerateOnClose) 00284 { 00285 UNICODE_STRING SubsystemNameU; 00286 UNICODE_STRING ObjectTypeNameU; 00287 UNICODE_STRING ObjectNameU; 00288 NTSTATUS Status; 00289 00290 RtlCreateUnicodeStringFromAsciiz(&SubsystemNameU, 00291 (PCHAR)SubsystemName); 00292 RtlCreateUnicodeStringFromAsciiz(&ObjectTypeNameU, 00293 (PCHAR)ObjectTypeName); 00294 RtlCreateUnicodeStringFromAsciiz(&ObjectNameU, 00295 (PCHAR)ObjectName); 00296 00297 Status = NtOpenObjectAuditAlarm(&SubsystemNameU, 00298 HandleId, 00299 &ObjectTypeNameU, 00300 &ObjectNameU, 00301 pSecurityDescriptor, 00302 ClientToken, 00303 DesiredAccess, 00304 GrantedAccess, 00305 Privileges, 00306 ObjectCreation, 00307 AccessGranted, 00308 (PBOOLEAN)GenerateOnClose); 00309 RtlFreeUnicodeString(&SubsystemNameU); 00310 RtlFreeUnicodeString(&ObjectTypeNameU); 00311 RtlFreeUnicodeString(&ObjectNameU); 00312 if (!NT_SUCCESS(Status)) 00313 { 00314 SetLastError(RtlNtStatusToDosError(Status)); 00315 return FALSE; 00316 } 00317 00318 return TRUE; 00319 } 00320 00321 00322 /* 00323 * @implemented 00324 */ 00325 BOOL WINAPI 00326 ObjectOpenAuditAlarmW(LPCWSTR SubsystemName, 00327 LPVOID HandleId, 00328 LPWSTR ObjectTypeName, 00329 LPWSTR ObjectName, 00330 PSECURITY_DESCRIPTOR pSecurityDescriptor, 00331 HANDLE ClientToken, 00332 DWORD DesiredAccess, 00333 DWORD GrantedAccess, 00334 PPRIVILEGE_SET Privileges, 00335 BOOL ObjectCreation, 00336 BOOL AccessGranted, 00337 LPBOOL GenerateOnClose) 00338 { 00339 UNICODE_STRING SubsystemNameU; 00340 UNICODE_STRING ObjectTypeNameU; 00341 UNICODE_STRING ObjectNameU; 00342 NTSTATUS Status; 00343 00344 RtlInitUnicodeString(&SubsystemNameU, 00345 (PWSTR)SubsystemName); 00346 RtlInitUnicodeString(&ObjectTypeNameU, 00347 (PWSTR)ObjectTypeName); 00348 RtlInitUnicodeString(&ObjectNameU, 00349 (PWSTR)ObjectName); 00350 00351 Status = NtOpenObjectAuditAlarm(&SubsystemNameU, 00352 HandleId, 00353 &ObjectTypeNameU, 00354 &ObjectNameU, 00355 pSecurityDescriptor, 00356 ClientToken, 00357 DesiredAccess, 00358 GrantedAccess, 00359 Privileges, 00360 ObjectCreation, 00361 AccessGranted, 00362 (PBOOLEAN)GenerateOnClose); 00363 if (!NT_SUCCESS(Status)) 00364 { 00365 SetLastError(RtlNtStatusToDosError(Status)); 00366 return FALSE; 00367 } 00368 00369 return TRUE; 00370 } 00371 00372 00373 /* 00374 * @implemented 00375 */ 00376 BOOL WINAPI 00377 ObjectPrivilegeAuditAlarmA(LPCSTR SubsystemName, 00378 LPVOID HandleId, 00379 HANDLE ClientToken, 00380 DWORD DesiredAccess, 00381 PPRIVILEGE_SET Privileges, 00382 BOOL AccessGranted) 00383 { 00384 UNICODE_STRING SubsystemNameU; 00385 NTSTATUS Status; 00386 00387 RtlCreateUnicodeStringFromAsciiz(&SubsystemNameU, 00388 (PCHAR)SubsystemName); 00389 00390 Status = NtPrivilegeObjectAuditAlarm(&SubsystemNameU, 00391 HandleId, 00392 ClientToken, 00393 DesiredAccess, 00394 Privileges, 00395 AccessGranted); 00396 RtlFreeUnicodeString (&SubsystemNameU); 00397 if (!NT_SUCCESS(Status)) 00398 { 00399 SetLastError(RtlNtStatusToDosError(Status)); 00400 return FALSE; 00401 } 00402 00403 return TRUE; 00404 } 00405 00406 00407 /* 00408 * @implemented 00409 */ 00410 BOOL WINAPI 00411 ObjectPrivilegeAuditAlarmW(LPCWSTR SubsystemName, 00412 LPVOID HandleId, 00413 HANDLE ClientToken, 00414 DWORD DesiredAccess, 00415 PPRIVILEGE_SET Privileges, 00416 BOOL AccessGranted) 00417 { 00418 UNICODE_STRING SubsystemNameU; 00419 NTSTATUS Status; 00420 00421 RtlInitUnicodeString(&SubsystemNameU, 00422 (PWSTR)SubsystemName); 00423 00424 Status = NtPrivilegeObjectAuditAlarm(&SubsystemNameU, 00425 HandleId, 00426 ClientToken, 00427 DesiredAccess, 00428 Privileges, 00429 AccessGranted); 00430 if (!NT_SUCCESS(Status)) 00431 { 00432 SetLastError(RtlNtStatusToDosError(Status)); 00433 return FALSE; 00434 } 00435 00436 return TRUE; 00437 } 00438 00439 00440 /* 00441 * @implemented 00442 */ 00443 BOOL WINAPI 00444 PrivilegedServiceAuditAlarmA(LPCSTR SubsystemName, 00445 LPCSTR ServiceName, 00446 HANDLE ClientToken, 00447 PPRIVILEGE_SET Privileges, 00448 BOOL AccessGranted) 00449 { 00450 UNICODE_STRING SubsystemNameU; 00451 UNICODE_STRING ServiceNameU; 00452 NTSTATUS Status; 00453 00454 RtlCreateUnicodeStringFromAsciiz(&SubsystemNameU, 00455 (PCHAR)SubsystemName); 00456 RtlCreateUnicodeStringFromAsciiz(&ServiceNameU, 00457 (PCHAR)ServiceName); 00458 00459 Status = NtPrivilegedServiceAuditAlarm(&SubsystemNameU, 00460 &ServiceNameU, 00461 ClientToken, 00462 Privileges, 00463 AccessGranted); 00464 RtlFreeUnicodeString(&SubsystemNameU); 00465 RtlFreeUnicodeString(&ServiceNameU); 00466 if (!NT_SUCCESS(Status)) 00467 { 00468 SetLastError(RtlNtStatusToDosError(Status)); 00469 return FALSE; 00470 } 00471 00472 return TRUE; 00473 } 00474 00475 00476 /* 00477 * @implemented 00478 */ 00479 BOOL WINAPI 00480 PrivilegedServiceAuditAlarmW(LPCWSTR SubsystemName, 00481 LPCWSTR ServiceName, 00482 HANDLE ClientToken, 00483 PPRIVILEGE_SET Privileges, 00484 BOOL AccessGranted) 00485 { 00486 UNICODE_STRING SubsystemNameU; 00487 UNICODE_STRING ServiceNameU; 00488 NTSTATUS Status; 00489 00490 RtlInitUnicodeString(&SubsystemNameU, 00491 (PWSTR)SubsystemName); 00492 RtlInitUnicodeString(&ServiceNameU, 00493 (PWSTR)ServiceName); 00494 00495 Status = NtPrivilegedServiceAuditAlarm(&SubsystemNameU, 00496 &ServiceNameU, 00497 ClientToken, 00498 Privileges, 00499 AccessGranted); 00500 if (!NT_SUCCESS(Status)) 00501 { 00502 SetLastError(RtlNtStatusToDosError(Status)); 00503 return FALSE; 00504 } 00505 00506 return TRUE; 00507 } 00508 00509 00510 /* 00511 * @unimplemented 00512 */ 00513 BOOL WINAPI 00514 AccessCheckByTypeResultListAndAuditAlarmByHandleW(IN LPCWSTR SubsystemName, 00515 IN LPVOID HandleId, 00516 IN HANDLE ClientToken, 00517 IN LPCWSTR ObjectTypeName, 00518 IN LPCWSTR ObjectName, 00519 IN PSECURITY_DESCRIPTOR pSecurityDescriptor, 00520 IN PSID PrincipalSelfSid, 00521 IN DWORD DesiredAccess, 00522 IN AUDIT_EVENT_TYPE AuditType, 00523 IN DWORD Flags, 00524 IN POBJECT_TYPE_LIST ObjectTypeList, 00525 IN DWORD ObjectTypeListLength, 00526 IN PGENERIC_MAPPING GenericMapping, 00527 IN BOOL ObjectCreation, 00528 OUT LPDWORD GrantedAccess, 00529 OUT LPDWORD AccessStatusList, 00530 OUT LPBOOL pfGenerateOnClose) 00531 { 00532 FIXME("%s() not implemented!\n", __FUNCTION__); 00533 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 00534 return FALSE; 00535 } 00536 00537 00538 /* 00539 * @unimplemented 00540 */ 00541 BOOL WINAPI 00542 AccessCheckByTypeResultListAndAuditAlarmByHandleA(IN LPCSTR SubsystemName, 00543 IN LPVOID HandleId, 00544 IN HANDLE ClientToken, 00545 IN LPCSTR ObjectTypeName, 00546 IN LPCSTR ObjectName, 00547 IN PSECURITY_DESCRIPTOR pSecurityDescriptor, 00548 IN PSID PrincipalSelfSid, 00549 IN DWORD DesiredAccess, 00550 IN AUDIT_EVENT_TYPE AuditType, 00551 IN DWORD Flags, 00552 IN POBJECT_TYPE_LIST ObjectTypeList, 00553 IN DWORD ObjectTypeListLength, 00554 IN PGENERIC_MAPPING GenericMapping, 00555 IN BOOL ObjectCreation, 00556 OUT LPDWORD GrantedAccess, 00557 OUT LPDWORD AccessStatusList, 00558 OUT LPBOOL pfGenerateOnClose) 00559 { 00560 FIXME("%s() not implemented!\n", __FUNCTION__); 00561 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 00562 return FALSE; 00563 } 00564 00565 00566 /* 00567 * @unimplemented 00568 */ 00569 BOOL WINAPI 00570 AccessCheckByTypeResultListAndAuditAlarmW(IN LPCWSTR SubsystemName, 00571 IN LPVOID HandleId, 00572 IN LPCWSTR ObjectTypeName, 00573 IN LPCWSTR ObjectName, 00574 IN PSECURITY_DESCRIPTOR pSecurityDescriptor, 00575 IN PSID PrincipalSelfSid, 00576 IN DWORD DesiredAccess, 00577 IN AUDIT_EVENT_TYPE AuditType, 00578 IN DWORD Flags, 00579 IN POBJECT_TYPE_LIST ObjectTypeList, 00580 IN DWORD ObjectTypeListLength, 00581 IN PGENERIC_MAPPING GenericMapping, 00582 IN BOOL ObjectCreation, 00583 OUT LPDWORD GrantedAccess, 00584 OUT LPDWORD AccessStatusList, 00585 OUT LPBOOL pfGenerateOnClose) 00586 { 00587 FIXME("%s() not implemented!\n", __FUNCTION__); 00588 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 00589 return FALSE; 00590 } 00591 00592 00593 /* 00594 * @unimplemented 00595 */ 00596 BOOL WINAPI 00597 AccessCheckByTypeResultListAndAuditAlarmA(IN LPCSTR SubsystemName, 00598 IN LPVOID HandleId, 00599 IN LPCSTR ObjectTypeName, 00600 IN LPCSTR ObjectName, 00601 IN PSECURITY_DESCRIPTOR pSecurityDescriptor, 00602 IN PSID PrincipalSelfSid, 00603 IN DWORD DesiredAccess, 00604 IN AUDIT_EVENT_TYPE AuditType, 00605 IN DWORD Flags, 00606 IN POBJECT_TYPE_LIST ObjectTypeList, 00607 IN DWORD ObjectTypeListLength, 00608 IN PGENERIC_MAPPING GenericMapping, 00609 IN BOOL ObjectCreation, 00610 OUT LPDWORD GrantedAccess, 00611 OUT LPDWORD AccessStatusList, 00612 OUT LPBOOL pfGenerateOnClose) 00613 { 00614 FIXME("%s() not implemented!\n", __FUNCTION__); 00615 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 00616 return FALSE; 00617 } 00618 00619 00620 /* 00621 * @unimplemented 00622 */ 00623 BOOL WINAPI 00624 AccessCheckByTypeAndAuditAlarmW(IN LPCWSTR SubsystemName, 00625 IN LPVOID HandleId, 00626 IN LPCWSTR ObjectTypeName, 00627 IN LPCWSTR ObjectName, 00628 IN PSECURITY_DESCRIPTOR pSecurityDescriptor, 00629 IN PSID PrincipalSelfSid, 00630 IN DWORD DesiredAccess, 00631 IN AUDIT_EVENT_TYPE AuditType, 00632 IN DWORD Flags, 00633 IN POBJECT_TYPE_LIST ObjectTypeList, 00634 IN DWORD ObjectTypeListLength, 00635 IN PGENERIC_MAPPING GenericMapping, 00636 IN BOOL ObjectCreation, 00637 OUT LPDWORD GrantedAccess, 00638 OUT LPBOOL AccessStatus, 00639 OUT LPBOOL pfGenerateOnClose) 00640 { 00641 FIXME("%s() not implemented!\n", __FUNCTION__); 00642 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 00643 return FALSE; 00644 } 00645 00646 00647 /* 00648 * @unimplemented 00649 */ 00650 BOOL WINAPI 00651 AccessCheckByTypeAndAuditAlarmA(IN LPCSTR SubsystemName, 00652 IN LPVOID HandleId, 00653 IN LPCSTR ObjectTypeName, 00654 IN LPCSTR ObjectName, 00655 IN PSECURITY_DESCRIPTOR pSecurityDescriptor, 00656 IN PSID PrincipalSelfSid, 00657 IN DWORD DesiredAccess, 00658 IN AUDIT_EVENT_TYPE AuditType, 00659 IN DWORD Flags, 00660 IN POBJECT_TYPE_LIST ObjectTypeList, 00661 IN DWORD ObjectTypeListLength, 00662 IN PGENERIC_MAPPING GenericMapping, 00663 IN BOOL ObjectCreation, 00664 OUT LPDWORD GrantedAccess, 00665 OUT LPBOOL AccessStatus, 00666 OUT LPBOOL pfGenerateOnClose) 00667 { 00668 FIXME("%s() not implemented!\n", __FUNCTION__); 00669 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 00670 return FALSE; 00671 } 00672 00673 /* EOF */ Generated on Sun May 27 2012 04:22:41 for ReactOS by
1.7.6.1
|