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