能提供源代码吗?

解决方案 »

  1.   

    http://www.driverdevelop.com/forum/viewthread.php?tid=13197#pid138719
    Windows 2000 下通过访问物理地址取主机唯一信息(WSS-SourceCode-02005) Author: sinister
    Email: [email protected]
    Homepage:http://www.whitecell.org 
    Date: 2002-05-28在9x下取得主版序列号非常简单,但此方法在NT/2K下行不通。还好NT/2K下 
    提供了 \Device\PhysicalMemory 设备,通过它可以得到物理地址。在9x下 
    通过访问地址 FEC71H 可以得到主板序列号。NT/2K下虽不保证是主板序列号, 
    但经过多台机器反复测试,此地址的值是不变且唯一的。下面是我 DRIVE 中 
    取主机唯一信息的代码,错误之处还望各位指正。 BOOLEAN MainBoardBiosSerialNo()
    {HANDLE physmem;
    UNICODE_STRING physmemString;
    OBJECT_ATTRIBUTES attributes;
    WCHAR physmemName[] = L"\\Device\\PhysicalMemory";NTSTATUS ntStatus;
    DWORD RAdd = 0xFEC71;
    DWORD LAdd = 100;
    DWORD OAdd;
    DWORD i;
    RtlInitUnicodeString( &physmemString, physmemName );InitializeObjectAttributes( &attributes, 
    &physmemString,
    OBJ_CASE_INSENSITIVE,
    NULL, 
    NULL
    );
    ntStatus = ZwOpenSection( &physmem, 
    SECTION_MAP_READ, 
    &attributes
    );if( !NT_SUCCESS( ntStatus ))

    DbgPrint("ZwOpenSection() is error\n");
    return FALSE;
    }DbgPrint("ZwOpenSection() is OK\n");if (!MapView(physmem,&RAdd,&LAdd,&OAdd))

    DbgPrint("MapView() is error\n");
    return FALSE;
    }DbgPrint("MapView() is OK\n");for ( i = 0; i < LAdd; i ++)
    {
    DbgPrint("%x",*(PUCHAR)(OAdd + i));}ntStatus = ZwUnmapViewOfSection( (HANDLE) -1, (PVOID) OAdd );if( !NT_SUCCESS(ntStatus))
    {
    DbgPrint("Unable to unmap view");
    return FALSE;

    return TRUE;
    }
    BOOLEAN MapView( HANDLE HPMemory,DWORD *dwAddress,DWORD *dwLength,DWORD *dwVAddress )
    {
    NTSTATUS Status;
    PHYSICAL_ADDRESS ViewBaseAddress;*dwVAddress = 0;
    ViewBaseAddress.QuadPart = (ULONGLONG) (*dwAddress);Status = ZwMapViewOfSection ( HPMemory,
    (HANDLE) -1,
    (PVOID)dwVAddress,
    0,
    *dwLength,
    &ViewBaseAddress,
    dwLength,
    ViewShare,
    0,
    PAGE_READONLY
    );if( !NT_SUCCESS( Status ))
    {
    return FALSE;
    }return TRUE;
    }