الدالة : CreateFile
#1
السلام عليكم و رحمة الله و بركاته ,,

ممكن شرح الباراماتر الرابع للدالة :

كود :
Function [color=Red]CreateFile[/color](lpFileName: PChar; dwDesiredAccess, dwShareMode: DWORD; lpSecurityAttributes: PSecurityAttributes; dwCreationDisposition, dwFlagsAndAttributes: DWORD; hTemplateFile: THandle): THandle; stdcall;

lpSecurityAttributes : لم أفهم منه غير أنه عبارة على مؤشر نحو

SECURITY_ATTRIBUTES ??:mad: .

و جازاكم الله كل خير .
الرد
#2
طبعا أخي الكريم فهو مؤشر نحو SECURITY_ATTRIBUTES structure الدي بدوره يحدد المقبض العائد(returned)

هل سيتم وراتثه من طرف processes الابناء

ادا كان lpSecurityAttributes يؤشر على nil فان المقبض لن تتم وراتثه
لا اله الا أنت سبحانك اني كنت من الضالمين
الرد
#3
me&delphi' كتب :طبعا أخي الكريم فهو مؤشر نحو SECURITY_ATTRIBUTES structure الدي بدوره يحدد المقبض العائد(returned)

هل سيتم وراتثه من طرف processes الابناء

ادا كان lpSecurityAttributes يؤشر على nil فان المقبض لن تتم وراتثه

1- تقصد مقبض الملف انو المنفذ في حالة نجاح الدالة ’’ + ما هي طبيعة التحديد .

2- ممكن توضح أكثر (المقبض لن تتم وراتثه) يعني لن نستطيع تمريره لـ SetFilePointer/Read&WriteFile

بارك الله فيك .
I'M Fly Like A G6

الرد
#4
هدا البارامتر أخي الكريم اختياري ولست ملزم به

وأحسن شرح وهو لمبرمج الدالة http://msdn.microsoft.com/en-us/library/...S.85).aspx
لا اله الا أنت سبحانك اني كنت من الضالمين
الرد
#5
نعم كنت على دراية به لكن **** توضيح مقنع فقط ... بارك الله فيك .
الرد
#6
بالرغم من أن الـ lpSecurityAttributes = Nil

لكنه يمرر الناتج (مقبض Hwnd) للدالة : SetFilePointer ???.

هذا باتشر بسيط برمجته فقط للتجربة :

كود :
Program Test; {$R Res.res} {$HINTS Off} {$OPTIMIZATION On} {$WARNINGS Off} Uses Windows; Const ID_Bmp = 100; Var CrFileResult: Hwnd; Buf: Byte; BytesR: Dword; Function Int2Hex(DecValue: Integer): string; Const HexV = '0123456789ABCDEF'; begin Repeat case DecValue mod 16 of 0..15: Result := HexV[DecValue mod 16 + 1] + Result; End; DecValue := DecValue div 16; Until DecValue = 0; End; Function WindowProc(hWnd: hWnd; uMSG: DWord; wParam: wParam; lParam: lParam): Bool; stdcall; Begin Result := True; Case uMSG of $0010: //WM_CLOSE EndDialog(hWnd, GetLastError); $0002: //WM_DESTROY PostQuitMessage(GetLastError); $0111: //WM_COMMAND: Case wParam and $FFFF of 10: ExitProcess(0); 11: Begin CrFileResult := CreateFile('000.Exe', GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); If CrFileResult <> INVALID_HANDLE_VALUE then Begin SetFilePointer(CrFileResult, 2, nil, 0); ReadFile(CrFileResult, Buf, 1, BytesR, nil); MessageBox(0, PChar('$' + Int2Hex(Buf)), '', $40 + $2000 + $00); CloseHandle(CrFileResult); End; End; End; Else Result := False; End; End; Begin DialogBoxParam(HInstance, PChar(666), 0, @WindowProc, 0); End.

المهم أيمكن أن يكون Buffer يعني متغير ليس له نمط محدد
لأنه يمكن أن يأخذ قيمة Boolean و Pointer ؟؟؟ في نفس الوقت ؟؟.
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم