c ++ - Null session pipes eksempel, skrive adgang

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg er på udkig efter et simpelt eksempel på, hvordan man opretter et null-sessionsrør, der kan læses fra eller skrives til af klienter på en anden pc gennem lan.


Jeg har fundet denne MSDN-artikel, men koden der giver kun læseadgang til røret. Jeg har forsøgt at få det til at skrive: ændre PIPE\_ACCESS\_OUTBOUND til PIPE\_ACCESS\_DUPLEX (CreateNamedPipe argument ), FILE\_GENERIC\_READ til GENERIC\_READ | GENERIC\_WRITE (AddAccessAllowedAce argument) og GENERIC\_READ til GENERIC\_READ | GENERIC\_WRITE (CreateFile argument), men jeg får en ACCESS\_DENIED (5) fejl, når man forsøger at kalde CreateFile i klientprogrammet. Selvom der kun åbnes et rør til læsning, fungerer det korrekt. [21]


Serveren er lanceret på Windows 7-maskine og klienten på Windows XP.


Her er min Windows 7-registreringsdatabasenøgle (NullSessionPipes indeholder testrør og AnonymPipe-strenge. Måske noget der forårsager problemet?


[HKEY\_LOCAL\_MACHINESYSTEMCurrentControlSetservicesLanmanServerParameters]
"ServiceDll"=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,
  00,74,00,25,00,5c,00,73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,
  73,00,72,00,76,00,73,00,76,00,63,00,2e,00,64,00,6c,00,6c,00,00,00
"ServiceDllUnloadOnStop"=dword:00000001
"EnableAuthenticateUserSharing"=dword:00000001
"NullSessionPipes"=hex(7):74,00,65,00,73,00,74,00,70,00,69,00,70,00,65,00,00,
  00,41,00,6e,00,6f,00,6e,00,79,00,6d,00,6f,00,75,00,73,00,50,00,69,00,70,00,
  65,00,00,00,00,00
"autodisconnect"=dword:0000000f
"enableforcedlogoff"=dword:00000001
"enablesecuritysignature"=dword:00000000
"requiresecuritysignature"=dword:00000000
"restrictnullsessaccess"=dword:00000000
"Lmannounce"=dword:00000000
"Size"=dword:00000001
"AdjustedNullSessionPipes"=dword:00000003
"Guid"=hex:eb,c5,75,fd,46,51,ce,4c,8f,64,a9,70,12,f6,05,6e


Kan du give mig det korrekte null session pipe eksempel, eller fortæl mig hvordan du redigerer MSDN eksempel?


Opdater


Her er hvad jeg allerede har prøvet:



  1. FILE\_GENERIC\_READ | FILE\_WRITE\_DATA i både AddAccessAllowedAce og CreateFile som @HarryJohnston foreslog

  2. GENERIC\_ALL i AddAccessAllowedAce

  3. Null DACL: SetSecurityDescriptorDacl(sa.lpSecurityDescriptor, TRUE, NULL, FALSE)



Men jeg har ikke formået at åbne et rør til skrivning. (ACCESS\_DENIED fejl). Pipesec.exe viser, at alle nødvendige tilladelser er til stede: 'Skriv data' i tilfælde af FILE\_GENERIC\_READ | FILE\_WRITE\_DATA og desuden 'Skriv attributter' og 'Skriv Udvidede attributter 'i tilfælde af GENERIC\_READ|GENERIC\_WRITE.


Når jeg starter serveren på XP og klient på Windows 7, får jeg ingen fejl.


Opdater 2


Når jeg enten aktiverer 'Netværksadgang: Lad alle tilladelser gælde for anonyme brugere' indstilling, eller give 'Impersonate a client after authentication' brugerretten til gruppen ANONYMOUS LOGON, får jeg ingen fejl. Dette er mærkeligt, fordi efterligningsfunktioner ikke anvendes overalt i MSDN-eksemplet.

Bedste reference