المشاركات : 563
المواضيع 28
:
: 0
الإنتساب : Dec 2008
السلام عليكم و رحمة الله و بركاته ,,
ممكن شرح الباراماتر الرابع للدالة :
كود :
Function [color=Red]CreateFile[/color](lpFileName: PChar; dwDesiredAccess, dwShareMode: DWORD;
lpSecurityAttributes: PSecurityAttributes; dwCreationDisposition, dwFlagsAndAttributes: DWORD;
hTemplateFile: THandle): THandle; stdcall;
lpSecurityAttributes : لم أفهم منه غير أنه عبارة على مؤشر نحو
SECURITY_ATTRIBUTES ??:mad: .
و جازاكم الله كل خير .
المشاركات : 358
المواضيع 34
:
: 2
الإنتساب : Nov 2008
طبعا أخي الكريم فهو مؤشر نحو SECURITY_ATTRIBUTES structure الدي بدوره يحدد المقبض العائد(returned)
هل سيتم وراتثه من طرف processes الابناء
ادا كان lpSecurityAttributes يؤشر على nil فان المقبض لن تتم وراتثه
لا اله الا أنت سبحانك اني كنت من الضالمين
المشاركات : 563
المواضيع 28
:
: 0
الإنتساب : Dec 2008
me&delphi' كتب :طبعا أخي الكريم فهو مؤشر نحو SECURITY_ATTRIBUTES structure الدي بدوره يحدد المقبض العائد(returned)
هل سيتم وراتثه من طرف processes الابناء
ادا كان lpSecurityAttributes يؤشر على nil فان المقبض لن تتم وراتثه
1- تقصد مقبض الملف انو المنفذ في حالة نجاح الدالة ’’ + ما هي طبيعة التحديد .
2- ممكن توضح أكثر (المقبض لن تتم وراتثه) يعني لن نستطيع تمريره لـ SetFilePointer/Read&WriteFile
بارك الله فيك .
المشاركات : 358
المواضيع 34
:
: 2
الإنتساب : Nov 2008
هدا البارامتر أخي الكريم اختياري ولست ملزم به
وأحسن شرح وهو لمبرمج الدالة
http://msdn.microsoft.com/en-us/library/...S.85).aspx
لا اله الا أنت سبحانك اني كنت من الضالمين
المشاركات : 563
المواضيع 28
:
: 0
الإنتساب : Dec 2008
نعم كنت على دراية به لكن **** توضيح مقنع فقط ... بارك الله فيك .
المشاركات : 563
المواضيع 28
:
: 0
الإنتساب : Dec 2008
بالرغم من أن الـ 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 ؟؟؟ في نفس الوقت ؟؟.