52 #include <e32def.h> |
52 #include <e32def.h> |
53 #include <e32def_private.h> |
53 #include <e32def_private.h> |
54 #include "d_ldd.h" |
54 #include "d_ldd.h" |
55 |
55 |
56 _LIT(KLddFileName, "D_LDD.LDD"); |
56 _LIT(KLddFileName, "D_LDD.LDD"); |
57 _LIT(KLddFileNameBadUid, "D_LDDNS.LDD"); |
57 _LIT(KLddFullNameBadUid, "Z:\\SYS\\BIN\\D_LDDNS.LDD"); |
58 |
58 |
59 #ifdef __EPOC32__ |
59 #ifdef __EPOC32__ |
60 _LIT(KLddFileNameRam, "D_LDD_RAM.LDD"); |
60 _LIT(KLddFileNameRam, "D_LDD_RAM.LDD"); |
61 #endif |
61 #endif |
62 |
62 |
313 COMPLETE_POST_BOOT_SYSTEM_TASKS(); |
313 COMPLETE_POST_BOOT_SYSTEM_TASKS(); |
314 TInt r; |
314 TInt r; |
315 test.Title(); |
315 test.Title(); |
316 test.Start(_L("Test device driver loading and unloading")); |
316 test.Start(_L("Test device driver loading and unloading")); |
317 |
317 |
|
318 // Turn off evil lazy dll unloading |
|
319 RLoader l; |
|
320 test(l.Connect() == KErrNone); |
|
321 test(l.CancelLazyDllUnload() == KErrNone); |
|
322 l.Close(); |
|
323 |
|
324 test.Next(_L("Check that a PDD or DLL cannot be loaded as an LDD")); |
|
325 RLibrary lib; |
|
326 RLibrary::TInfoV2 info; |
|
327 TPckg<RLibrary::TInfoV2> infoPkg(info); |
|
328 r = RLibrary::GetInfo(KLddFullNameBadUid, infoPkg); |
|
329 test.Printf(_L("RLibrary::GetInfo(%S) returned %d\n"), &KLddFullNameBadUid, r); |
|
330 if (r == KErrNone) |
|
331 { |
|
332 const TUidType uids (info.iUids); |
|
333 test.Printf(_L("Info shows UIDs 0x%x, 0x%x, 0x%x\n"), uids[0], uids[1], uids[2]); |
|
334 r = lib.Load(KLddFullNameBadUid, uids); |
|
335 test.Printf(_L("RLibrary::Load(%S, (uids)) returned %d\n"), &KLddFullNameBadUid, r); |
|
336 } |
|
337 else |
|
338 { |
|
339 r = lib.Load(KLddFullNameBadUid); |
|
340 test.Printf(_L("RLibrary::Load(%S) returned %d\n"), &KLddFullNameBadUid, r); |
|
341 } |
|
342 if (r >= 0) |
|
343 { |
|
344 TFileName libname (lib.FileName()); |
|
345 TUidType ids2 (lib.Type()); |
|
346 test.Printf(_L("Loaded %S as a DLL, UIDs 0x%x, 0x%x, 0x%x\n"), &libname, ids2[0], ids2[1], ids2[2]); |
|
347 lib.Close(); |
|
348 } |
|
349 |
|
350 r = User::LoadLogicalDevice(KLddFullNameBadUid); |
|
351 test.Printf(_L("RLibrary::LoadLogicalDevice(%S) returned %d\n"), &KLddFullNameBadUid, r); |
|
352 test(r == KErrNotSupported); // This "LDD" is not valid (wrong UID2) |
|
353 |
318 DoTest(KLddFileName); |
354 DoTest(KLddFileName); |
319 #ifdef __EPOC32__ |
355 #ifdef __EPOC32__ |
320 DoTest(KLddFileNameRam); |
356 DoTest(KLddFileNameRam); |
321 DoTest2(KLddFileNameRam); |
357 DoTest2(KLddFileNameRam); |
322 #endif |
358 #endif |
323 |
359 |
324 r=User::LoadLogicalDevice(KLddFileNameBadUid); |
|
325 test(r==KErrNotSupported); |
|
326 |
|
327 test.End(); |
360 test.End(); |
328 return(KErrNone); |
361 return(KErrNone); |
329 } |
362 } |
330 |
363 |