wang_80919 发表于 2018-1-16 01:54:36

ZwQuerySystemInformation 安全使用心得 Delphi 版

请不要用复制代码按钮。

作为 DELPHI 版本,需要引用 jwaNative, JwaWinType ,他们是 JEDI API 的一部分。JEDI 官网有下载。

先给出 2 个辅助函数 和 一些结构体。

type      
PRecord = ^TRecord;
TRecord = record
end;
      
PSystemInformationList = ^TSystemInformationList;
TSystemInformationList = record
    Count: ULONG;
    List: array of TRecord;
end;
      
PSYSTEM_HANDLE_Informations = ^TSYSTEM_HANDLE_Informations;
_SYSTEM_HANDLE_Informations = record
    Count: ULONG;
    SH: array of _SYSTEM_HANDLE_INFORMATION;
end;
      
TSYSTEM_HANDLE_Informations = _SYSTEM_HANDLE_Informations;
SYSTEM_HANDLE_Informations = _SYSTEM_HANDLE_Informations;
      
PNM_INFO = ^TNM_INFO;
      
_NM_INFO = record
    hFile: THandle;
    Info: _FILE_NAME_Information;
    Name: array of WideChar;
end;
      
TNM_INFO = _NM_INFO;
NM_INFO = _NM_INFO;
      
Function GetSystemInformationClassSize(Const ATableType: SYSTEM_INFORMATION_CLASS; Const Count: ULONG): ULONG;
begin
Result := 0;
case ATableType of
    SystemBasicInformation:
      Result := $002C;
    SystemProcessorInformation:
      Result := $0000C;
    SystemPerformanceInformation:
      Result := $0138;
    // SystemTimeInformation: Result := $0020;
    // SystemPathInformation: Result := $0;
    // SystemProcessInformation: Result := $00C8 + Count;
    // SystemCallInformation: Result := $0018 + (Count * $0004);
    SystemConfigurationInformation:
      Result := $0018;
    // SystemProcessorCounters: Result := $0030 + Count;//per cpu
    SystemGlobalFlag:
      Result := $0004; // (fails if size != 4)
    // SystemCallTimeInformation: Result := $0;
    SystemModuleInformation:
      Result := $0004 + (Count * Sizeof(SYSTEM_MODULE_INFORMATION)); //(n * 0x011C)
    SystemLockInformation:
      Result := $0004 + (Count * Sizeof(SYSTEM_LOCK_INFORMATION)); //(n * 0x0024)
    // SystemStackTraceInformation: Result := $0;
    // SystemPagedPoolInformation: Result := $0;
    // SystemNonPagedPoolInformation: Result := $0;
    SystemHandleInformation:
      Result := $0004 + (Count * Sizeof(SYSTEM_HANDLE_INFORMATION)); //(n * 0x0010)
    // SystemObjectTypeInformation: Result := $0038+ + (Count * $0030);// +)
    SystemPageFileInformation:
      Result := $0018 + (Count * Sizeof(SYSTEM_PAGEFILE_INFORMATION));
    // SystemVdmInstemulInformation: Result := $0088;
    // SystemVdmBopInformation: Result := $0;
    SystemCacheInformation:
      Result := $0024;
    SystemPoolTagInformation:
      Result := $0004 + (Count * Sizeof(SYSTEM_POOL_TAG_INFORMATION)); // (n * 0x001C)
    // SystemInterruptInformation: Result := $0000 + Count;//, or 0x0018 per cpu
    SystemDpcInformation:
      Result := $0014;
    // SystemFullMemoryInformation: Result := $0;
    // SystemLoadDriver: Result := $0018;//, set mode only
    // SystemUnloadDriver: Result := $0004;//, set mode only
    // SystemTimeAdjustmentInformation: Result := $000C;//, 0x0008 writeable
    // SystemSummaryMemoryInformation: Result := $0;
    // SystemNextEventIdInformation: Result := $0;
    // SystemEventIdsInformation: Result := $0;
    SystemCrashDumpInformation:
      Result := $0004;
    SystemExceptionInformation:
      Result := $0010;
    SystemCrashDumpStateInformation:
      Result := $0004;
    // SystemDebuggerInformation: Result := $0002;
    SystemContextSwitchInformation:
      Result := $0030;
    SystemRegistryQuotaInformation:
      Result := $000C;
    // SystemAddDriver: Result := $0008;//, set mode only
    // SystemPrioritySeparationInformatio: Result := $0004;//, set mode only
    // SystemPlugPlayBusInformation: Result := $0;
    // SystemDockInformation: Result := $0;
    // SystemPowerInfo: Result := $0060;// (XP only!)
    // SystemProcessorSpeedInformation: Result := $000C;// (XP only!)
    SystemTimeZoneInformation:
      Result := $00AC;
    SystemLookasideInformation:
      Result := Count * $0020;
    SystemSetTimeSlipEvent:
      Result := $0;
    SystemCreateSession:
      Result := $0;
    SystemDeleteSession:
      Result := $0;
    SystemInvalidInfoClass1:
      Result := $0;
    SystemRangeStartInformation:
      Result := $0004; // (fails if size != 4)
    SystemVerifierInformation:
      Result := $0;
    SystemAddVerifier:
      Result := $0;
    SystemSessionProcessesInformation:
      Result := $0;
end;
end;
      
Function GetSystemInformationClassHasCount(Const ATableType: SYSTEM_INFORMATION_CLASS): BOOL;
begin
Result := False;
case ATableType of
    // SystemProcessInformation,
    // SystemCallInformation,
    // SystemProcessorCounters,
    SystemModuleInformation,
    SystemLockInformation,
    SystemHandleInformation,
    // SystemObjectTypeInformation,
    //SystemPageFileInformation, //好像这个还不确定。
    // SystemInterruptInformation,
    SystemPoolTagInformation:
      Result := True;
end;
//可以 和 GetSystemInformationClassSize 配合使用。
end;

上面的 NM_INFO 和本文无关。

大家 可以 方便的使用 GetSystemInformationTable 来 获取所需的系统信息数据。

**** Hidden Message *****



特别声明
禁止 win2003 (楚凡) QQ635887 使用本人修改的内容

禁止 qiuyan81 (苦恋树) QQ46494153 使用本人修改的内容。

禁止 gfuchaoQQ82715485 使用本人修改的内容。

禁止 supersk QQ未知,使用本人修改的内容。

禁止 yesin119 QQ未知,使用本人修改的内容。

禁止 263378440 使用本人修改的内容。

禁止 yanse 使用本人修改的内容。

禁止 ltshdp、ltsh、(禁卫军) 使用本人修改的内容

禁止 www123 使用本人修改的内容

禁止 eliyh 使用本人修改的内容

禁止 zwjchinazwj (蒲石) 使用本人修改的内容

禁止 zhipu QQ:2001972使用本人修改的内容

禁止 jackalan (nVicen) QQ:875271757使用本人修改的内容

禁止 kencc2016 (小宇) QQ:2601759381 使用本人修改的内容

以上用户名均为 2CCC 的

禁止 QQ:191909837 使用本人修改的内容
禁止 QQ 81604691 使用本人修改的版内容
禁止 QQ:122742470(菜根) 使用本人修改或建立的代码或工具。

当然,如果你们脸皮比较厚,就偷偷的用吧。

凡是想要骂我的,都可以偷偷的用,反正我是控制不了。
只要你们不鄙视自己就行。

cntlis 发表于 2018-10-7 07:57:14

亲亲,给看一下吧

我就提问 发表于 2018-10-27 08:37:05

有个性的猫
页: [1]
查看完整版本: ZwQuerySystemInformation 安全使用心得 Delphi 版