青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

沒畫完的畫

喂馬 劈柴 BBQ~
posts - 37, comments - 55, trackbacks - 0, articles - 0
  C++博客 ::  :: 新隨筆 :: 聯系 :: 聚合  :: 管理

關于 TrueCrypt 續集

Posted on 2008-09-04 17:04 沒畫完的畫 閱讀(1223) 評論(0)  編輯 收藏 引用 所屬分類: Windows Driver

2008.09.04

此篇是(關于 TrueCrypt)的續集, 在看此篇前先看上篇,不然會很危險

從 DriverEntry 看起

NTSTATUS
DriverEntry (
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
{
// 讀取注冊時使用的變量
UNICODE_STRING parameter_path;
RTL_QUERY_REGISTRY_TABLE query_table[2];
ULONG n_devices;

NTSTATUS status;
UNICODE_STRING device_dir_name;
OBJECT_ATTRIBUTES object_attributes;
ULONG n;
USHORT n_created_devices;
// #define PARAMETER_KEY L"\\Parameters"
parameter_path.Length = 0;
parameter_path.MaximumLength = RegistryPath->Length + sizeof(PARAMETER_KEY);
parameter_path.Buffer = (PWSTR) ExAllocatePool(PagedPool, parameter_path.MaximumLength);
if (parameter_path.Buffer == NULL)
return STATUS_INSUFFICIENT_RESOURCES;
RtlCopyUnicodeString(&parameter_path, RegistryPath);
RtlAppendUnicodeToString(&parameter_path, PARAMETER_KEY);
RtlZeroMemory(&query_table[0], sizeof(query_table));
query_table[0].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_REQUIRED;
query_table[0].Name = NUMBEROFDEVICES_VALUE; // #define NUMBEROFDEVICES_VALUE L"NumberOfDevices"
query_table[0].EntryContext = &n_devices;
status = RtlQueryRegistryValues(
RTL_REGISTRY_ABSOLUTE,
parameter_path.Buffer,
&query_table[0],
NULL,
NULL
);
ExFreePool(parameter_path.Buffer);
if (!NT_SUCCESS(status))
{
// 如果讀取注冊表失敗, 則默認為 4個
// #define DEFAULT_NUMBEROFDEVICES 4
KdPrint(("FileDisk: Query registry failed, using default values.\n"));
n_devices = DEFAULT_NUMBEROFDEVICES;
}
// 下面的代碼完成在設備目錄中創建對應的目錄
/*
* #define DEVICE_BASE_NAME _T("\\FileDisk")
* #define DEVICE_DIR_NAME _T("\\Device") DEVICE_BASE_NAME
* #define DEVICE_NAME_PREFIX DEVICE_DIR_NAME DEVICE_BASE_NAME
*/
RtlInitUnicodeString(&device_dir_name, DEVICE_DIR_NAME);
InitializeObjectAttributes(
&object_attributes,
&device_dir_name,
OBJ_PERMANENT,
NULL,
NULL
);
status = ZwCreateDirectoryObject(
&dir_handle,
DIRECTORY_ALL_ACCESS,
&object_attributes
);
if (!NT_SUCCESS(status))
{
return status;
}
// 將上面創建的設備目錄屬性設置為 臨時
ZwMakeTemporaryObject(dir_handle);
for (n = 0, n_created_devices = 0; n < n_devices; n++)
{
status = FileDiskCreateDevice(DriverObject, n, FILE_DEVICE_DISK);
if (NT_SUCCESS(status))
{
n_created_devices++;
}
}
for (n = 0; n < n_devices; n++)
{
status = FileDiskCreateDevice(DriverObject, n, FILE_DEVICE_CD_ROM);
if (NT_SUCCESS(status))
{
n_created_devices++;
}
}
if (n_created_devices == 0)
{
ZwClose(dir_handle);
return status;
}
DriverObject->MajorFunction[IRP_MJ_CREATE] = FileDiskCreateClose;
DriverObject->MajorFunction[IRP_MJ_CLOSE] = FileDiskCreateClose;
DriverObject->MajorFunction[IRP_MJ_READ] = FileDiskReadWrite;
DriverObject->MajorFunction[IRP_MJ_WRITE] = FileDiskReadWrite;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = FileDiskDeviceControl;
DriverObject->DriverUnload = FileDiskUnload;
return STATUS_SUCCESS;
}


DriverEntry() 做的大概東西就是:
1、讀取注冊表的
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\FileDisk\Parameters\
下面的 NumberOfDevices 這個值
2、如果指定的設備目錄(\\FileDisk\\Device)不存在, 創建對應的設備目錄
3、然后調用 IoCreateDevice() 在創建的設備目錄下創建設備
4、每創建一個設備都同時創建一個線程,具體用來做什么,正在摸索中.........

問題1: RTL_QUERY_REGISTRY_TABLE query_table[2]; // 這里為何要定義為 2?
-- 未解決,先看下在應用層讀取注冊表是如何做的先!

問題2: 將上面創建的設備目錄屬性設置為 臨時 ZwMakeTemporaryObject(dir_handle);
-- 未解決,設置屬性為臨時的作用是? 重啟系統時這個設備目錄會不存在? 如果不設置這個屬性,重啟系統后還存在?

問題3: 為何在 DriverEntry() 里就用 IoCreateDevice() 創建設備?不是等應用層運行用 mount 后才創建設備的嗎?
-- 未解決,先郁悶一下?。。?!

問題4: 關于[設備目錄]的疑問,[設備目錄]是個什么東東?……
-- 未解決,在N久前,好像看過這樣一篇文章,講的是 Windows 下面所有內核對象都是采用對象管理 之類的
有空再找下這方面的詳細資料?。。?再郁悶一下!??!

問題5、FileDiskCreateDevice() 函數中在調用了 IoCreateDevice() 創建設備后
設置了 device_object 的屬性, 這些語句的作用是什么?
device_object->Flags |= DO_DIRECT_IO;

device_extension = (PDEVICE_EXTENSION) device_object->DeviceExtension;

device_extension->media_in_device = FALSE;

if (DeviceType == FILE_DEVICE_CD_ROM)
{
device_object->Characteristics |= FILE_READ_ONLY_DEVICE;
device_extension->read_only = TRUE;
}


另外奇怪的是, 為何設置 device_object 的屬性后,不需要調 update() 之類的函數,
重新設置的屬性在設置完后就生效????

問題6、FileDisk.sys 在 DriverEntry() 就創建了四個設備,四條內核線程,導致 mount 最多就 4 個設備,
為何不做成可以動態加載N個設備?(因為我見過其它類似于 TrueCrypt 的工具,是可以動態Mount N個分區的)

接下來,應該先了解下 驅動與應用層的通信方式是怎樣的先!Google 一下

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美淫片网站| 午夜日韩在线| 美日韩精品免费| 欧美一区日本一区韩国一区| 欧美视频一区二区在线观看| 亚洲综合精品| 亚洲资源av| 国产午夜久久久久| 久久综合激情| 女人天堂亚洲aⅴ在线观看| 日韩一级欧洲| 中文日韩在线| 国产一区二区三区久久 | 久久国产视频网站| 久久久精品性| 一区二区欧美亚洲| 亚洲免费人成在线视频观看| 国产在线观看精品一区二区三区| 六月天综合网| 欧美日韩国产一区二区三区| 先锋影音久久| 美国成人毛片| 先锋影音久久久| 免费成人黄色| 午夜精品久久久| 久热re这里精品视频在线6| 在线视频精品| 久久久久久高潮国产精品视| av不卡在线观看| 欧美怡红院视频| 99成人在线| 久久精品99无色码中文字幕| 一本久久青青| 久久人体大胆视频| 香蕉免费一区二区三区在线观看 | 欧美一区不卡| 亚洲日本欧美天堂| 亚洲一二三区精品| 亚洲日本视频| 久久久久国产精品午夜一区| 亚洲视频在线观看视频| 久久亚洲精品一区| 欧美一区二区三区啪啪| 欧美日韩99| 欧美高清在线| 狠狠色噜噜狠狠色综合久| 夜夜嗨av一区二区三区中文字幕| 亚洲高清在线播放| 香蕉av福利精品导航| 亚洲一卡久久| 欧美日韩国产精品一卡| 亚洲第一福利社区| 国产精品一区2区| 一本大道久久a久久精二百| 亚洲国产精品国自产拍av秋霞| 午夜精品久久久久久久99水蜜桃| 一区二区久久久久| 欧美极品aⅴ影院| 亚洲第一福利视频| 影音先锋中文字幕一区二区| 欧美一区二区精品在线| 欧美在线免费观看视频| 国产精品你懂的在线| 亚洲乱码国产乱码精品精 | 欧美日韩国产综合久久| 亚洲欧洲久久| 一区二区三区产品免费精品久久75 | 99视频在线观看一区三区| 老司机精品导航| 欧美国产日韩一区二区三区| 在线播放中文字幕一区| 久久综合狠狠| 亚洲国产精品成人久久综合一区| 亚洲第一精品夜夜躁人人躁| 麻豆久久久9性大片| 欧美风情在线观看| 日韩午夜高潮| 欧美日韩在线视频一区二区| 中日韩美女免费视频网站在线观看| 一本色道久久88精品综合| 欧美日韩伦理在线免费| 一区二区三区久久精品| 性做久久久久久久久| 国产亚洲在线观看| 久久五月天婷婷| 亚洲国产精品久久久久久女王| 99精品国产在热久久| 国产精品久久久久影院色老大| 亚洲欧美另类国产| 男同欧美伦乱| 一区二区三区久久网| 国产麻豆午夜三级精品| 久久婷婷久久一区二区三区| 亚洲人成人一区二区三区| 亚洲一区二区三区欧美| 韩国成人精品a∨在线观看| 久热re这里精品视频在线6| 日韩午夜视频在线观看| 久久av红桃一区二区小说| 亚洲高清中文字幕| 欧美性事在线| 久久青青草综合| av不卡在线| 欧美a级片网| 亚洲综合成人婷婷小说| 伊人久久综合97精品| 欧美日韩免费观看一区二区三区| 午夜电影亚洲| 91久久精品久久国产性色也91 | 尤物yw午夜国产精品视频明星 | 久久九九99| 日韩一级片网址| 久久一区二区三区四区| 中文无字幕一区二区三区| 国内成人精品一区| 欧美日韩综合视频网址| 美女网站在线免费欧美精品| 亚洲愉拍自拍另类高清精品| 亚洲国产精品激情在线观看| 久久久久久久久伊人| 亚洲午夜av| 日韩视频一区二区在线观看 | 欧美一区二区福利在线| 亚洲免费久久| 亚洲电影在线免费观看| 国产日产亚洲精品系列| 欧美午夜久久久| 欧美成人免费全部| 久久精品亚洲一区二区| 欧美有码视频| 亚洲一级二级在线| 99国产精品久久久久老师| 亚洲国产精品尤物yw在线观看| 久久欧美肥婆一二区| 性做久久久久久免费观看欧美 | 国产乱码精品1区2区3区| 欧美日韩国产精品| 欧美精品激情| 欧美激情国产日韩精品一区18| 久久伊人免费视频| 久久精品国产视频| 欧美影院成人| 久久精品在线免费观看| 欧美一区二区三区免费视| 亚洲欧美日韩一区二区在线| 亚洲一区3d动漫同人无遮挡| 中文欧美字幕免费| 中文有码久久| 午夜精品福利在线| 性久久久久久久久| 欧美综合国产| 久久一区二区三区四区| 免费成人黄色片| 欧美精品一区二区三区在线看午夜 | 亚洲精品视频啊美女在线直播| 亚洲第一网站| 亚洲精品一区在线观看香蕉| 亚洲免费观看在线观看| 日韩一级免费观看| 亚洲欧美日韩在线播放| 久久精品欧洲| 欧美激情小视频| 欧美三级电影精品| 国产精品一区一区| 在线播放日韩专区| 亚洲激情偷拍| 亚洲视频免费| 久久精品一区二区三区不卡牛牛| 久久综合国产精品台湾中文娱乐网| 久久色中文字幕| 亚洲国产三级在线| 亚洲视频欧洲视频| 久久精精品视频| 欧美激情一区二区三区| 国产精品日韩精品欧美在线| 国内精品久久国产| 艳女tv在线观看国产一区| 欧美一区二区三区视频在线 | 亚洲国产经典视频| 中文一区字幕| 久久在线视频| 国产精品户外野外| 伊伊综合在线| 亚洲在线中文字幕| 欧美成人久久| 亚洲免费在线精品一区| 免费在线视频一区| 国产欧美精品xxxx另类| 91久久精品www人人做人人爽| 亚洲免费网站| 亚洲成人中文| 午夜视频久久久久久| 欧美理论电影网| 曰本成人黄色| 欧美在线一区二区| 亚洲每日在线| 欧美成人午夜剧场免费观看| 国产一区二区三区四区在线观看| 一本色道**综合亚洲精品蜜桃冫| 美女国产一区|