[pso] [tema5][win]creare IRP

Razvan Deaconescu razvand at cs.pub.ro
Sun Aug 26 15:18:07 EEST 2007


Mihnea Muraru wrote:
> Salut!
> 
> La tema 5 pe windows ma lovesc de urmatorul comportament:
> 
> Obtin mai intai device-ul asociat PhysicalDrive1, folosind 
> IoGetDeviceObjectPointer si trimitandu-i ca nume symlink-ul:
> 
> 
> UNICODE_STRING devName, physName1, physName2;
> PDEVICE_OBJECT physDev1, physDev2;
> PFILE_OBJECT physFile1 = NULL, physFile2 = NULL;
> 
> RtlInitUnicodeString(&physName1, L"\\??\\PhysicalDrive1");
> IoGetDeviceObjectPointer(&physName1, STANDARD_RIGHTS_ALL, &physFile1, 
> &physDev1);
> 
> 
> Functia intoarce succes, dar, mai departe, IoBuildSynchronousFsdRequest 
> intoarce NULL (parametrii sunt initializati):
> 
> 
> irp = IoBuildSynchronousFsdRequest(MajorFunction, physDev1, Buffer,
>         Length, StartingOffset, &event, IoStatusBlock);
> 
> 
> Am incercat de curiozitate sa trimit in loc de physDev1, insusi 
> device-ul inregistrat de driver (SoftwareRaid) si functia a reusit sa 
> creeze pachetul.
> 
> Care ar putea fi problema?

Foloseşte L"\\DosDevices\\PhysicalDrive1" în loc de 
L"\\??\\PhysicalDrive1"; la fel şi la PhysicalDrive2.

> Exista vreo functie asemanatoare GetLastError?

Ca de obicei, documentaţia de Windows e făcută ca să fie sigur că mori 
tânăr :-)) Cea mai bună referinţă la ceva util este acest link: 
http://support.microsoft.com/kb/259693

Ştiu că era în documentaţia de MSDN o listare a valorilor posibile cu 
care se poate întoarce un apel (valori de tip NTSTATUS), dar nu o mai 
găsesc. Găseşti, însă, această listă în ntstatus.h. Verifică valoarea 
numerică întoarsă de funcţie şi compară cu ceea ce apare în ntstatus.h; 
de obicei numele macrodefiniţiei este destul de expresiv.

Răzvan


More information about the pso mailing list