|
关于fbwf的大小, 你的结论是对.我引用你的话,只是指出和物理内存大小没有关系,你没4GB,设置为4095也可以达到4GB,不需要物理内存大才能设置,你开个1GB的虚拟机就可以了.
为什么最大时4095MB呢?
fbwf.c
- NTSTATUS FbwfCheckForVolatileBoot(__int64 size)
- {
- ...
- if ( is_WINPE )
- {
- RtlInitUnicodeString((PUNICODE_STRING)&keyName, L"WinPECacheThreshold");
- result = ZwQueryValueKey(KeyHandle, (PUNICODE_STRING)&keyName, KeyValuePartialInformation, &pvpi, ulSize, &ulSize);
- if ( result >= 0 && pvpi->Type == REG_DWORD )
- {
- TotalBytes = (unsigned int)(pvpi->Data << 20);
- }
- }
- if ( KeyHandle )
- result = ZwClose(KeyHandle);
- ...
- }
复制代码
TotalBytes = (unsigned int)(pvpi->Data << 20);
注册表读取出来的数据,左移20位(相当于*1024*1024 [*2的20次方]),
就是从注册表读取的MB转换到字节.
unsigned int => 无符号整型 => 4字节 => 32位
左移20位,那么12位以上的数据将被舍弃.
12位二进制数据最大值 11111111111 => 0xFFF = 4095
通常认知的 4096 => 0x1000 => 1 0000 0000 0000
左移20位 => 1 0000 0000 0000 0000 0000 0000 0000 0000
保留32位的话, 0000 0000 0000 0000 0000 0000 0000 0000 => 0
1是第33位,被舍弃掉了.
能看懂就看吧, 不过多解释了. |
|