[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