ورود

View Full Version : دسترسی به دیتای بافر در تابع WtiteFile



joker
دوشنبه 21 مرداد 1387, 08:22 صبح
میخواستم بدونم چطوری میتونم به دیتای موجود در باقر تابع WriteFile وقتی که داریم اون را هوک میکنیم دسترسی داشته باشم با توجه به نکات زیر:

شکا استاندارد استفاده از تابع موقع هوک :


code of : hadiDelphi
var
WriteFileNext:function (hFile: THandle; const Buffer; nNumberOfBytesToWrite: DWORD;
var lpNumberOfBytesWritten: DWORD; lpOverlapped: POverlapped): BOOL; stdcall;

function WriteFileCallback(hFile: THandle; const Buffer; nNumberOfBytesToWrite: DWORD;
var lpNumberOfBytesWritten: DWORD; lpOverlapped: POverlapped): BOOL; stdcall;
خب نکته : const Buffer
امکان استفاده از باقر به صورت آرایه ای از بایت میخوام باشه
موردی که مشکل بود تا الان برام
موقع تعریف متغییری از جنس آرایه بایتی مقدار اون آرایه وقتی کم باشه ( در حد چند کیلو بایت مشکلی نیست البته مشکل بازم هستا ، فایلهای در همین حد را میتونه بخونه ، واگه فایل بزرگتر بود خب نادیده میگیره،
ولی وقتی مقدار آرایه را زیاد و بزرگ تعریف میشه (چون حجم فایل مقصد مشخص نیست ) برنامه یا کرکش میکنه یا خراب مشه
buf:Array [0..1024] of byte
به نظرتون چطوری به مقادیر دسترسی پیدا کنم به و بتونم موقع هوک کردن تغییرشون بدم ؟ در سایزها و حجمهای بالای فایل ( بدون توجه به نوع فایل متنی یا باینتری)

B-Vedadian
دوشنبه 21 مرداد 1387, 15:20 عصر
کد مشابه زیر رو خودم شخصا امتحان کردم


type
TByteArray = array[0..0] of Byte;
PByteArray = ^TByteArray;
.
.
.
var
tmp: PByteArray;
i: Integer;
.
.
.
begin
tmp := @buffer;
for i := 0 to WhatEverYouDesire do
begin
tmp[i] := WhatEverYouDesireEither;
AnyVariable := tmp[i];
.
.
.
end;

فقط دقت کن که WhatEverYouDesire از اندازه بافرت بیشتر نشه!!!!