WEB开发网
开发学院软件开发VC 如何在windows程序中读取bios内容 阅读

如何在windows程序中读取bios内容

 2006-04-08 11:38:48 来源:WEB开发网   
核心提示:本文示例源代码或素材下载 今天和夜月兄讨论了一下在windows nt/2000/xp下如何读取bios信息,现在把结果向大家汇报一下,如何在windows程序中读取bios内容,大家都知道,windows接管了对物理内存的直接存取,访问物理内存时,此处指向UNICODE字符串"\device\phy

本文示例源代码或素材下载

今天和夜月兄讨论了一下在windows nt/2000/xp下如何读取bios信息,现在把结果向大家汇报一下。

大家都知道,windows接管了对物理内存的直接存取,而bios信息存在物理内存的f000:0000处,关键就是如何读取物理内存。

查阅了msdn的文章后,发现以下有几个函数和物理内存访问有关:

NTSTATUS ZwOpenSection(OUT PHANDLE SectionHandle, IN ACCESS_MASK DesiredAccess,IN POBJECT_ATTRIBUTES ObjectAttributes);
NTSTATUS ZwMapViewOfSection(IN HANDLE SectionHandle,
               IN HANDLE ProcessHandle,
               IN OUT PVOID *BaseAddress,
               IN ULONG ZeroBits,
               IN ULONG CommitSize,
               IN OUT PLARGE_INTEGER SectionOffset OPTIONAL,
               IN OUT PSIZE_T ViewSize,
               IN SECTION_INHERIT InheritDisposition,
               IN ULONG AllocationType,
               IN ULONG Protect
               );
NTSTATUS ZwUnmapViewOfSection(IN HANDLE ProcessHandle,IN PVOID BaseAddress);

用到的结构定义如下

typedef struct _UNICODE_STRING {
  USHORT Length;//长度
  USHORT MaximumLength;//最大长度
  PWSTR Buffer;//缓存指针,访问物理内存时,此处指向UNICODE字符串"\device\physicalmemory"
} UNICODE_STRING,*PUNICODE_STRING;
typedef struct _OBJECT_ATTRIBUTES {
   ULONG Length;//长度 18h
   HANDLE RootDirectory;// 00000000
   PUNICODE_STRING ObjectName;//指向对象名的指针
   ULONG Attributes;//对象属性00000040h
   PVOID SecurityDescriptor;    // Points to type SECURITY_DESCRIPTOR,0
   PVOID SecurityQualityOfService; // Points to type SECURITY_QUALITY_OF_SERVICE,0
} OBJECT_ATTRIBUTES;
typedef OBJECT_ATTRIBUTES *POBJECT_ATTRIBUTES;

1 2  下一页

Tags:如何 windows 程序

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接