2 Lab 4, at the rate of the OS.
4 Tested with the system kmtest
5 the following functions:
6 FsRtlInitializeTunnelCache
9 FsRtlDeleteKeyFromTunnelCache
10 FsRtlFindInTunnelCache
12 Ashuha Arseny IU9-41. 2013.
25 PUNICODE_STRING
CopyUS(PUNICODE_STRING a
)
27 PUNICODE_STRING b
= (PUNICODE_STRING
)ExAllocatePool(PagedPool
,sizeof(UNICODE_STRING
));
28 ok(b
!= NULL
, "US is NULL after allocated memory\n");
30 b
->MaximumLength
=a
->MaximumLength
;
31 b
->Buffer
= (PWSTR
)ExAllocatePoolWithTag(PagedPool
, b
->MaximumLength
, 1633);
32 ok(b
->Buffer
!= NULL
, "US->Buffer is NULL after allocated memory\n");
33 RtlCopyUnicodeString(b
, a
);
37 void TestFsRtlInitializeTunnelCache()
40 T
= ExAllocatePool(PagedPool
, sizeof(TUNNEL
));
41 ok(T
!= NULL
, "PTUNEL is NULL after allocated memory\n");
42 Tb
= ExAllocatePool(PagedPool
, sizeof(TUNNEL
));
43 ok(Tb
!= NULL
, "PTUNEL is NULL after allocated memory\n");
45 memset((void*)T
, 0, sizeof(TUNNEL
));
46 memset((void*)Tb
, 0, sizeof(TUNNEL
));
48 FsRtlInitializeTunnelCache(T
);
50 eq
= RtlCompareMemory((const VOID
*)T
, (const VOID
*)Tb
, sizeof(TUNNEL
));
52 ok ( eq
!= sizeof(TUNNEL
), "FsRtlInitializeTunnelCache function did not change anything in the memory at the address PTUNEL.\n");
55 void TestFsRtlAddToTunnelCache(ULONGLONG DirectoryKey
, PUNICODE_STRING s_name
, PUNICODE_STRING l_name
, BOOLEAN KeyByShortName
)
59 PUNICODE_STRING bs_name
;
60 PUNICODE_STRING bl_name
;
64 Buf
= ExAllocatePool(PagedPool
, BufSize
);
65 ok(Buf
!= NULL
, "Buff in TestFsRtlAddToTunnelCache is NULL after allocated memory\n");
66 Bufb
= ExAllocatePool(PagedPool
, BufSize
);
67 ok(Bufb
!= NULL
, "Buff in TestFsRtlAddToTunnelCache is NULL after allocated memory\n");
69 //allocate memory for the bufs_name
70 bs_name
= CopyUS(s_name
);
72 //allocate memory for the l_name and bl_name
73 bl_name
= CopyUS(l_name
);
75 memset((void*)Buf
, 0, BufSize
);
76 memset((void*)Bufb
, 0, BufSize
);
78 FsRtlAddToTunnelCache(T
, DirectoryKey
, s_name
, l_name
, KeyByShortName
, BufSize
, Buf
);
80 eq
= RtlCompareMemory((const VOID
*)Buf
, (const VOID
*)Bufb
, BufSize
);
82 ok( eq
!= sizeof(TUNNEL
),"FsRtlAddToTunnelCache function did not change anything in the memory at the address Buf.\n");
84 b
= RtlCompareUnicodeString(l_name
, bl_name
, TRUE
);
85 ok (b
== 0, "long name after call FsRtlAddToTunnelCache != long name befo call FsRtlAddToTunnelCache\n\n");
86 b
= RtlCompareUnicodeString(s_name
, bs_name
, TRUE
);
87 ok (b
== 0, "short name after call FsRtlAddToTunnelCache != short name befo call FsRtlAddToTunnelCache\n\n");
90 BOOLEAN
TestFsRtlFindInTunnelCache(ULONG DirectoryKey
, PUNICODE_STRING name
, PUNICODE_STRING s_name
, PUNICODE_STRING l_name
)
92 // Allocate memory for the Buf
93 ULONG BufsizeTemp
= BufSize
;
94 PVOID Buf
= ExAllocatePool(PagedPool
, BufSize
*2);
95 ok(Buf
!= NULL
, "Buff in FsRtlFindInTunnelCache is NULL after allocated memory\n");
97 return FsRtlFindInTunnelCache(T
, DirectoryKey
, name
, s_name
, l_name
, &BufsizeTemp
, Buf
);
100 void TestFsRtlDeleteKeyFromTunnelCache(ULONGLONG a
)
102 FsRtlDeleteKeyFromTunnelCache(T
, a
);
105 START_TEST(FsRtlTunnel
)
107 PUNICODE_STRING s_name
;
108 PUNICODE_STRING l_name
;
109 PUNICODE_STRING name
;
114 TestFsRtlInitializeTunnelCache();
116 s_name
= (PUNICODE_STRING
)ExAllocatePool(PagedPool
,sizeof(UNICODE_STRING
));
117 ok(s_name
!= NULL
, "s_name in TestFsRtlAddToTunnelCache is NULL after allocated memory\n");
118 RtlInitUnicodeString(s_name
, L
"smal");
120 l_name
= (PUNICODE_STRING
)ExAllocatePool(PagedPool
,sizeof(UNICODE_STRING
));
121 ok(l_name
!= NULL
, "l_name in TestFsRtlAddToTunnelCache is NULL after allocated memory\n");
122 RtlInitUnicodeString(l_name
, L
"bigbigbigbigbig");
125 TestFsRtlAddToTunnelCache(12345, s_name
, l_name
, TRUE
);
127 name
= (PUNICODE_STRING
)ExAllocatePool(PagedPool
,sizeof(UNICODE_STRING
));
128 ok(name
!= NULL
, "name in FsRtlFindInTunnelCache is NULL after allocated memory\n");
129 RtlInitUnicodeString(name
, L
"smal");
132 is
= TestFsRtlFindInTunnelCache(12345, name
, s_name
, l_name
);
133 ok(is
== TRUE
, "FsRtlFindInTunnelCache dosn't find elem id = 12345\n");
135 TestFsRtlDeleteKeyFromTunnelCache(12345); //Delete
136 is
= TestFsRtlFindInTunnelCache(12345, name
, s_name
, l_name
);
137 ok(is
== FALSE
, "TestFsRtlDeleteKeyFromTunnelCache dosn't delete elem id = 12345\n");
139 is
= TestFsRtlFindInTunnelCache(12347, name
, s_name
, l_name
);
140 ok(is
== FALSE
, "FsRtlDeleteTunnelCache dosn't clear cash\n");
142 TestFsRtlAddToTunnelCache(12345, s_name
, l_name
, TRUE
);
143 TestFsRtlAddToTunnelCache(12347, s_name
, l_name
, TRUE
);
144 a
= (PUNICODE_STRING
)ExAllocatePool(PagedPool
,sizeof(UNICODE_STRING
));
145 TestFsRtlAddToTunnelCache(12346, a
, l_name
, FALSE
);
148 FsRtlDeleteTunnelCache(T
);
150 is
= TestFsRtlFindInTunnelCache(12345, name
, s_name
, l_name
);
151 ok(is
== FALSE
, "FsRtlDeleteTunnelCache dosn't clear cash\n");
153 is
= TestFsRtlFindInTunnelCache(12346, name
, a
, l_name
);
154 ok(is
== FALSE
, "FsRtlDeleteTunnelCache dosn't clear cash\n");
156 is
= TestFsRtlFindInTunnelCache(12347, name
, s_name
, l_name
);
157 ok(is
== FALSE
, "FsRtlDeleteTunnelCache dosn't clear cash\n");