477{
502
503 union {
507 union {
518
531 {
533 }
534
535 DPRINT(
"BaseSrvDefineDosDevice entered, Flags:%d, DeviceName:%wZ (%d), TargetPath:%wZ (%d)\n",
536 DefineDosDeviceRequest->
Flags,
541
542
543
544
545
546
549 {
551 }
552
553
556 {
557 DPRINT1(
"RtlEnterCriticalSection() failed (Status %lx)\n",
561 }
562
563 LinkHandle = 0;
564
567 {
568
570 {
574 {
576
577
579 if (AbsLetter < 26 && AbsLetter >= 0)
580 {
582 }
583
585 if (AbsLetter < 26)
586 {
587
589 }
590 }
591 }
592
593
595 !DriveLetter)
596 {
599 }
600
601
603 CchLengthLeft = 0x1000 - 1 - CchLength;
606
607
613
614
616
617
619 {
622 }
623
624
625
626
627
628
629
630
631 if (DriveLetter)
632 {
635 {
637 }
638 }
639
640
644
645
647
648
650 {
651
653 {
654 LinkHandle = 0;
655 }
656
657
659 {
661 }
662
663
665 }
666
667
669 {
670
671 LinkHandle = 0;
672
673
674 if (RemoveDefinition)
675 {
676
677
678
679
681 {
683 }
684
685
687 }
688
689
690 HandleTarget =
FALSE;
691
692
693
694
695
696
697
699 }
700 else
701 {
702
704 {
706 }
707
708
710 {
711
714 {
716 }
717
718
719 if (IsGlobal)
720 {
722 CchLengthLeft = 0x1000 - 1 - CchLength;
724
727 }
728 }
729 }
730
731
733 {
734
736
737
739
740
742 {
745 }
746
747
750
751
754 }
755
756 else
757 {
760 }
761
762
763 if (HandleTarget)
764 {
765
769
773
775 {
777 }
778
780 {
782 }
783
784
785
786
787
788
789
790
791
793 if (CchLength < 2 ||
796 {
799 }
800 else
801 {
803 }
804 }
805
806 else if (RemoveDefinition)
807 {
809 }
810
811 else
812 {
814 }
815
816
817
818
819
820
821
822 if (LinkHandle != 0)
823 {
826 LinkHandle = 0;
827 }
828
829
831 {
833 }
834
835
836
837
838
839 if (RemoveDefinition)
840 {
841
846 {
847 CchLength = 0;
848 OrigPtr = CurrentPtr;
849
851 {
852 CurrentChar = *CurrentPtr;
853 ++CurrentPtr;
854
856 {
857 break;
858 }
859
860 ++CchLength;
861 }
862
863
864
865
866
867
868
869
870 if (RemoveFound ||
875 {
876 if (InterPtr != OrigPtr)
877 {
879 }
880
881 InterPtr += (CchLength + 1);
882 }
883 else
884 {
885
887 }
888 }
889
890
891
892
893
894
895
896
898 ++InterPtr;
899
900
902
903
904
905
906
907
909 {
911 }
912
913
916 }
917
918 else if (HandleTarget)
919 {
924 }
925
926 else
927 {
929 }
930
931
933 {
935 }
936
937
939 1,
950 {
952 }
953
955 1,
964 &SystemSid);
966 {
969 }
970
971
974
975
977
978
979
980
981
984 {
986 }
987 else
988 {
990 }
991
992
995
996
999
1000
1002
1003
1005
1006
1007
1008
1009
1011 {
1012 if (!IsGlobal)
1013 {
1015 {
1018 }
1019 }
1020 }
1021
1022 else
1023 {
1025 }
1026
1027
1032
1033
1035 {
1037 }
1038
1039
1041 {
1043 {
1045 }
1046
1047
1049
1050
1051
1052
1053
1054
1055
1056
1057 if (RemoveDefinition && !RemoveFound)
1058 {
1060 }
1061 }
1062
1063
1064 LinkHandle = 0;
1065 }
1067 {
1068
1069 if (LinkHandle != 0)
1070 {
1072 }
1073
1074
1076
1077
1079 {
1081
1082
1083 if (IsGlobal)
1084 {
1086 }
1087
1088
1090
1091
1092
1093
1094
1095 if (RemoveDefinition && !
RtlEqualLuid(&CallerLuid, &SystemLuid))
1096 {
1098 {
1100 }
1101 }
1102 }
1103
1104
1106 }
1108
1110}
static ACPI_BUFFER CurrentBuffer
static _Out_ PULONGLONG TargetLength
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
BOOLEAN NTAPI CsrImpersonateClient(IN PCSR_THREAD CsrThread)
BOOLEAN NTAPI CsrRevertToSelf(VOID)
PBASE_STATIC_SERVER_DATA BaseStaticServerData
#define SYMBOLIC_LINK_QUERY
_ACRTIMP int __cdecl _snwprintf(wchar_t *, size_t, const wchar_t *,...)
_ACRTIMP int __cdecl _wcsicmp(const wchar_t *, const wchar_t *)
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
_ACRTIMP int __cdecl _wcsnicmp(const wchar_t *, const wchar_t *, size_t)
static SID_IDENTIFIER_AUTHORITY WorldAuthority
#define InitializeObjectAttributes(p, n, a, r, s)
static SID_IDENTIFIER_AUTHORITY SystemAuthority
_In_ ACCESS_MASK AccessMask
_Out_writes_bytes_to_opt_ AbsoluteSecurityDescriptorSize PSECURITY_DESCRIPTOR _Inout_ PULONG _Out_writes_bytes_to_opt_ DaclSize PACL Dacl
NTSYSAPI NTSTATUS NTAPI RtlCreateAcl(PACL Acl, ULONG AclSize, ULONG AclRevision)
NTSYSAPI NTSTATUS NTAPI RtlCreateSecurityDescriptor(_Out_ PSECURITY_DESCRIPTOR SecurityDescriptor, _In_ ULONG Revision)
NTSYSAPI PVOID NTAPI RtlFreeSid(_In_ _Post_invalid_ PSID Sid)
WCHAR NTAPI RtlUpcaseUnicodeChar(_In_ WCHAR Source)
#define SYMBOLIC_LINK_ALL_ACCESS
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
_In_ ULONG _In_ ULONG _In_ ULONG Length
NTSYSAPI NTSTATUS NTAPI RtlAllocateAndInitializeSid(IN PSID_IDENTIFIER_AUTHORITY IdentifierAuthority, IN UCHAR SubAuthorityCount, IN ULONG SubAuthority0, IN ULONG SubAuthority1, IN ULONG SubAuthority2, IN ULONG SubAuthority3, IN ULONG SubAuthority4, IN ULONG SubAuthority5, IN ULONG SubAuthority6, IN ULONG SubAuthority7, OUT PSID *Sid)
#define STATUS_BAD_IMPERSONATION_LEVEL
NTSTATUS NTAPI NtMakePermanentObject(IN HANDLE ObjectHandle)
NTSTATUS NTAPI NtMakeTemporaryObject(IN HANDLE ObjectHandle)
NTSTATUS NTAPI NtQuerySymbolicLinkObject(IN HANDLE LinkHandle, OUT PUNICODE_STRING LinkTarget, OUT PULONG ResultLength OPTIONAL)
NTSTATUS NTAPI NtCreateSymbolicLinkObject(OUT PHANDLE LinkHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN PUNICODE_STRING LinkTarget)
NTSTATUS NTAPI NtOpenSymbolicLinkObject(OUT PHANDLE LinkHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
#define OBJ_CASE_INSENSITIVE
#define STATUS_BUFFER_OVERFLOW
UNICODE_STRING TargetPath
UNICODE_STRING DeviceName
BOOLEAN LUIDDeviceMapsEnabled
NTSTATUS GetCallerLuid(PLUID CallerLuid)
NTSTATUS AddBSMRequest(LONG DriveLetter, BOOLEAN RemoveDefinition, PLUID BroadcastLuid)
NTSTATUS IsGlobalSymbolicLink(HANDLE LinkHandle, PBOOLEAN IsGlobal)
BOOLEAN CheckForGlobalDriveLetter(SHORT DriveLetter)
#define RtlMoveMemory(Destination, Source, Length)
#define STATUS_OBJECT_NAME_NOT_FOUND
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
#define DDD_NO_BROADCAST_SYSTEM
#define DDD_EXACT_MATCH_ON_REMOVE
#define DDD_LUID_BROADCAST_DRIVE
#define DDD_REMOVE_DEFINITION
NTSYSAPI NTSTATUS WINAPI RtlAddAccessAllowedAce(PACL, DWORD, DWORD, PSID)
NTSYSAPI NTSTATUS WINAPI RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR, BOOLEAN, PACL, BOOLEAN)
NTSYSAPI void WINAPI RtlCopyLuid(PLUID, const LUID *)
_In_ USHORT _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _Reserved_ ULONG _In_opt_ PVOID _In_opt_ const WSK_CLIENT_CONNECTION_DISPATCH _In_opt_ PEPROCESS _In_opt_ PETHREAD _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor
#define RtlEqualLuid(Luid1, Luid2)
#define SECURITY_WORLD_SID_AUTHORITY
#define SECURITY_NULL_RID
#define SECURITY_RESTRICTED_CODE_RID
#define SECURITY_NT_AUTHORITY
#define SECURITY_DESCRIPTOR_REVISION
_Inout_ PUNICODE_STRING LinkTarget