DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: webb123
今日帖子: 3
在线用户: 2
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 jackalan (nVicen) ★☆☆☆☆ -
盒子活跃会员
2019/10/9 11:38:03
标题:
求教以下C语句转DELPHI应该如何正确转换,感谢! 浏览:1384
加入我的收藏
楼主: 求教以下语句转DELPHI应该如何正确转换,感谢!

FileRec=(PNTFS_FILE_RECORD_OUTPUT_BUFFER)VirtualAllocEx((HANDLE)-1,0,len,MEM_RESERVE|MEM_COMMIT,PAGE_READWRITE);

FileRec是PNTFS_FILE_RECORD_OUTPUT_BUFFER结构。

这句里面 (HANDLE)-1 如何转换到DELPHI,感谢!!!!!!!!
----------------------------------------------
简单做人,认真做事。
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2019/10/9 11:41:37
1楼: 我猜就是照抄。
FileRec := PNTFS_FILE_RECORD_OUTPUT_BUFFER(VirtualAllocEx(-1(看这个函数的类型定义), 0, len, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE));
----------------------------------------------
(C)(P)Flying Wang
作者:
男 jackalan (nVicen) ★☆☆☆☆ -
盒子活跃会员
2019/10/9 12:05:22
2楼: 提示越界
constant expression violates subrange bounds

@wang_80919 看来照抄是不行的哈。
----------------------------------------------
简单做人,认真做事。
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2019/10/9 12:07:03
3楼: FileRec := PNTFS_FILE_RECORD_OUTPUT_BUFFER(VirtualAllocEx(THandle(-1), 0, len, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE));
----------------------------------------------
(C)(P)Flying Wang
作者:
男 jackalan (nVicen) ★☆☆☆☆ -
盒子活跃会员
2019/10/9 12:20:09
4楼: typedef struct {
  LARGE_INTEGER FileReferenceNumber;
  DWORD         FileRecordLength;
  BYTE          FileRecordBuffer[1];
} NTFS_FILE_RECORD_OUTPUT_BUFFER, *PNTFS_FILE_RECORD_OUTPUT_BUFFER;

@wang_80919 感谢!再请教下,以上是MSDN的结构定义,
[color=#0000FF]FileRecordBuffer[1][/color] 这玩意怎么在DELPHI里面定义呢?

估计是我结构转换DELPHI有问题,所以下面返回总是出错。

        if DeviceIoControl(hDrive, FSCTL_GET_NTFS_FILE_RECORD, @lFileID, Sizeof(LARGE_INTEGER), FileRec, ulBytes, ulBytes, 0) then
----------------------------------------------
简单做人,认真做事。
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/10/9 12:28:31
5楼: https://docs.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-deviceiocontrol

https://www.delphipraxis.net/166704-createfile-deviceiocontrol-problem-mit-64bit.html

https://stackoverflow.com/questions/4581387/delphi-using-deviceiocontrol-passing-ioctl-disk-get-length-info-to-get-flash-m

https://jsproxy-demo.ml/-----https://www.google.com/search?source=hp&ei=mmKdXeG4Ioe-wAOrtpGQAw&q=delphi+DeviceIoControl&oq=delphi+DeviceIoControl&gs_l=psy-ab.12..0i30l4.574.574..2496...0.0..0.223.223.2-1......0....2j1..gws-wiz.jPUf9KTT3Yo&ved=0ahUKEwjh7cuOrI7lAhUHH3AKHStbBDIQ4dUDCAk
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2019/10/9 13:17:02
6楼: 楼主去找 Jedi api 这个 库,里头各种 WIN API 都帮你定义好了。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 jackalan (nVicen) ★☆☆☆☆ -
盒子活跃会员
2019/10/9 15:05:03
7楼: 非常感谢 Flying Wang 兄弟!!!!!!
谢谢 keymark 兄弟提供的资料!
----------------------------------------------
简单做人,认真做事。
作者:
男 jackalan (nVicen) ★☆☆☆☆ -
盒子活跃会员
2019/10/9 16:07:46
8楼: 前面的全部调通了,还差最后两个函数,不会翻译成DELPHI。。。C基础太差,麻烦兄弟们帮忙看看怎么转为DELPHI的。

#define ReadResidentAttribute(Attribute) (void*)((ULONG_PTR)(Attribute)+((PRESIDENT_ATTRIBUTE)(Attribute))->ValueOffset)


PATTRIBUTE GetNextAttribute(PFILE_RECORD_HEADER FileRecord,ATTRIBUTE_TYPE AttributeType,PATTRIBUTE CurrentPosition)
{
PATTRIBUTE Attribute;
for(Attribute=CurrentPosition?(PATTRIBUTE)((ULONG_PTR)CurrentPosition+CurrentPosition->Length):(PATTRIBUTE)((ULONG_PTR)FileRecord+FileRecord->AttributesOffset);Attribute->AttributeType!=-1&&Attribute->AttributeType!=0;Attribute=(PATTRIBUTE)((ULONG_PTR)Attribute+Attribute->Length))
if(Attribute->AttributeType==AttributeType)
return Attribute;
return 0;
}
----------------------------------------------
简单做人,认真做事。
作者:
男 jackalan (nVicen) ★☆☆☆☆ -
盒子活跃会员
2019/10/9 16:24:07
9楼: 有没有兄弟救命啊,实在看不懂。
----------------------------------------------
简单做人,认真做事。
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2019/10/9 16:52:46
10楼: 这费劲的,你直接找人家delphi版的不就完了么。
----------------------------------------------
--
作者:
男 jackalan (nVicen) ★☆☆☆☆ -
盒子活跃会员
2019/10/9 17:14:32
11楼: bahamut8348 兄弟,要能找到还费这个劲啊
----------------------------------------------
简单做人,认真做事。
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/10/9 19:40:24
12楼: GetNextAttribute
这是个循环吧
重要的是
if(Attribute->AttributeType==AttributeType)
return Attribute;
return 0;
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2019/10/10 14:30:20
13楼: function ReadResidentAttribute(Attribute: Pointer): Pointer;
begin
  Result := Pointer(ULONG_PTR(Attribute) + PRESIDENT_ATTRIBUTE(Attribute)^.ValueOffset);
end;

function GetNextAttribute(FileRecord: PFILE_RECORD_HEADER; AttributeType: ATTRIBUTE_TYPE; CurrentPosition: PATTRIBUTE): PATTRIBUTE;
begin
  var Attribute: PATTRIBUTE;
  if (Attribute = CurrentPosition) then
    Attribute := PATTRIBUTE(ULONG_PTR(CurrentPosition) + CurrentPosition^.Length)
  else
    Attribute := PATTRIBUTE(ULONG_PTR(FileRecord) + FileRecord^.AttributesOffset);
  while (not (Attribute^.AttributeType in [-1, 0])) do
  begin
    if (Attribute^.AttributeType = AttributeType) then
      Exit(Attribute);
    Attribute := PATTRIBUTE(ULONG_PTR(Attribute) + Attribute^.Length);
  end;

  Result := nil;
end;
----------------------------------------------
--
作者:
男 jackalan (nVicen) ★☆☆☆☆ -
盒子活跃会员
2019/10/10 22:14:21
14楼: 谢谢leonna兄弟,但执行结果不对,不知道函数哪里转换错了。
----------------------------------------------
简单做人,认真做事。
作者:
男 jackalan (nVicen) ★☆☆☆☆ -
盒子活跃会员
2019/10/10 22:20:15
15楼: GetNextAttribute(FileRecord: PFILE_RECORD_HEADER;

filerecord是一个mft表内的数据结构,这个结构中包含数据长度和文件内容。把filerecord直接存入文件会发现数据结构的其他属性和真实的文件数据都被存入文件,GetNextAttribute应该是从这个结构中把文件内容数据取出来。
----------------------------------------------
简单做人,认真做事。
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2019/10/10 23:44:18
16楼: 代码结构上是没问题的,下个断点跟一下咯,看看是不是结构翻译有问题
----------------------------------------------
--
作者:
男 jackalan (nVicen) ★☆☆☆☆ -
盒子活跃会员
2019/10/12 12:16:16
17楼: 结构也没问题,用的是Jedi API库。
filerecord数据来自于获取到的buffer,是一个array of byte,把这个buffer直接写入文件,可以看到正确的文件内容被包含在文件内,内容前部和后部分应该是一个结构属性。包括文件格式,文件编号那些。

但怎么就取不到单独的文件数据
----------------------------------------------
简单做人,认真做事。
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行76.17188毫秒 RSS