diff -r 51a74ef9ed63 -r ae94777fff8f Symbian3/SDK/Source/GUID-D8837969-74D0-5E17-AD42-3F10DD1FD5BF.dita --- a/Symbian3/SDK/Source/GUID-D8837969-74D0-5E17-AD42-3F10DD1FD5BF.dita Wed Mar 31 11:11:55 2010 +0100 +++ b/Symbian3/SDK/Source/GUID-D8837969-74D0-5E17-AD42-3F10DD1FD5BF.dita Fri Jun 11 12:39:03 2010 +0100 @@ -1,209 +1,209 @@ - - - - - -Loader -Search RulesThis topic provides a summary of the rules that the loader follows -to search for EXEs and DLLs. - -
Search rules -for an EXE

To start a new process, call RProcess::Create().

RProcess::Create() loads -the EXE specified in the input parameters. The function then looks through -the import table of the EXE to get a list of DLLs that the EXE references. -The loader uses the list of DLLs in the import table to load the DLLs. If -DLLs reference other DLLS, the loader uses the same method to load those DLLs. -See Search -rules for a DLL listed in the import table of an EXE.

The result -of a search for an EXE depends on:

    -
  • the name of the EXE. -You provide this information.

  • -
  • the UID type : you provide. -This is optional

  • -
  • the version of the EXEs -on the device

  • -

You pass the name of the EXE in the first parameter of RProcess::Create(). -You have a number of choices:

    -
  • you can specify the -file name only. The loader will assume a .exe file extension. -For example:

    efile

  • -
  • you can specify a filename -and an extension. For example:

    efile.exe

  • -
  • you can put a path in -front of the file name. A path has limited use, because the loader can load -EXEs only from the directory \sys\bin, or from subdirectories -of \sys\bin.

  • -

The -search procedure

The loader searches for EXEs with the given name -and extension. More than one EXE with the given name and extension can exist -on a device.

    -
  1. If you do not provide -a path, the loader searches the \sys\bin directory on -all drives. The loader searches drives in the order Y:, X: ... B:, A:. The Z: drive is searched last. Subdirectories of \sys\bin are -not searched.

    If you provide a path, there are only three useful cases:

      -
    • to limit the search -to a specific drive. For example:

      X:\sys\bin

      where X: can -be one of the drives A: to Z:.

    • -
    • to limit the search -to a subdirectory of \sys\bin on a specific drive. For -example:

      X:\sys\bin\aaa\bbb

      The use -of subdirectories in \sys\bin is not common.

      where X: -can be one of the drives A: to Z:.

    • -
    • to limit the search -to a subdirectory of \sys\bin on all drives. For example:

      \sys\bin\aaa\bbb

      The -loader searches all drives in the order Y:, X: ... B:, A:. -The Z: drive is searched last.

      The use of subdirectories -in \sys\bin is not common.

    • -

    The loader cannot load EXEs from other directories, because system -security prevents it.

  2. -
  3. The loader compares -the UID type (TUidType) of each EXE in the list with the -UID type you specify in RProcess::Create(). The UID type -is a set of three UIDs. Each UID in the UID type that you specify must match -the same UID in the UID type of the EXE. If you specify KNullUid for -any of the three UIDs in your UID type, a match is automatic.

  4. -
  5. If the search has found -no EXEs, the load fails.

  6. -
  7. If the search has found -one EXE only, the loader loads that EXE.

  8. -
  9. If more than one EXE -has been found, the loader loads the EXE with the highest version. A version N.n is -higher than version M.m if (N>M or (N==M and n>m)).

  10. -
  11. If all EXEs have the -same version, the loader loads the version found first.

  12. -
-
Search rules -for a DLL in the import table of an EXE or another DLL

After the -loader has selected the EXE, the loader loads all DLLs in the import table. -This is also called static linkage.

The import table contains the -name and extension of each DLL. The import table also contains the version -of each DLL and the 3rd UID that identifies each DLL. The version information -is stored in the import table when the executable file is built. All DLLs -have an ordered set of three UIDs. The third UID gives a unique identity to -the DLL. See UID protection.

The search procedure

The search uses the following procedure -for each DLL:

    -
  1. The loader searches -the \sys\bin directory on all drives for all DLLs that -have the filename and extension. The loader searches drives in the order Y:, X: ... B:, A:. The Z: drive is searched -last. Subdirectories of \sys\bin are not searched. The -loader searches for all versions of the DLL. If the loader finds the same -version of a DLL on more than one drive, the loader only adds the first one -to the set of possible DLLs. For example, if version 2.1 of a DLL is on drive D: and -on drive Z:, only the version on drive D: is -added to the set of possible DLLs.

    The loader cannot load DLLs from -other directories, because system security prevents it.

    [Before December -2007, the loader had different behaviour. The loader searched the drive from -which the EXE was loaded before the loader checked the other drives. For example, -if the EXE was loaded from drive Z:, and version 2.1 -of a DLL was on drive D: and drive Z:, -the loader selected the version of the DLL that was on drive Z:.]

  2. -
  3. The loader then selects -those DLLs that have the same 3rd UID from the set of possible DLLs. This -operation can decrease the set of possible DLLs. If there are no DLLs in the -set, the load fails.

  4. -
  5. The loader then selects -those DLLs that have platform security capabilities that match or exceed those -of the EXE. This selection operation can decrease the set of possible DLLs. -If there are no DLLs in the set the load fails.

    See also : Platform -security.

  6. -
  7. Each DLL in the import -table of the EXE has a version number. This number is the version of the DLL -to which the EXE is linked. The loader uses the version number in the import -table to select the correct version of the DLL. The following flowchart shows -how the loader selects the DLL from the set of possible DLLs.

    - -
  8. -
  9. If there are no DLLs -that meet the requirements, the load fails.

  10. -
-
Search rules -for a DLL loaded from a program

To load a DLL from a program, call RLibrary::Load(). -This is known as dynamic linking.

RLibrary::Load() loads -the DLL specified in the input parameters. The function then uses the import -table to get a list of referred DLLs. The loader loads the DLLs in the list -and uses the same search method that the loader uses for EXEs. See Search rules for a DLL in the import table of an EXE.

The -result of a search for an DLL depends on:

    -
  • the name of the DLL. -You provide this information.

  • -
  • the UID type : you provide. -This is optional.

  • -
  • the required version -: you provide. This is optional.

  • -
  • the version of the DLLs -on the device.

  • -

You pass the name of the DLL in the first parameter of RLibrary::Load(). -You have a number of choices:

    -
  • you can specify the -file name only. The loader will assume a .dll file extension. -For example:

    efsrv

  • -
  • you can specify a filename -and an extension. For example:

    efsrv.dll

  • -
  • you can put a path in -front of the file name. A path has limited use, because the loader can load -DLLs only from the directory \sys\bin, or from subdirectories -of \sys\bin.

  • -

See Dynamically -loading link libraries and Using -ECom.

The -search procedure

The loader searches for DLLs with the given name -and extension. More than one DLL with the given name and extension can exist -on a device.

    -
  1. If you do not provide -a path, the loader searches the \sys\bin directory on -all drives. The loader searches drives in the order Y:, X: ... B:, A:. The Z: drive is searched last. Subdirectories of \sys\bin are -not searched.

    If you provide a path, there are only three useful cases:

      -
    • to limit the search -to a specific drive. For example:

      X:\sys\bin

      where X: can -be one of the drives A: to Z:.

    • -
    • to limit the search -to a subdirectory of \sys\bin on a specific drive. For -example:

      X:\sys\bin\aaa\bb

      The use -of subdirectories in \sys\bin is not common.

      where X: can -be one of the drives A: to Z:.

    • -
    • to limit the search -to a subdirectory of \sys\bin on all drives. For example:

      \sys\bin\aaa\bbb

      The -loader searches all drives in the order Y:, X: ... B:, A:. -The Z: drive is searched last.

      The use of subdirectories -in \sys\bin is not common.

    • -

    System security prevents the loader from loading DLLs from any other -directories.

  2. -
  3. The loader compares -the UID type (TUidType) of each DLL in the list with the -UID type you specify in RLibrary::Load(). The UID type -is a set of three UIDs. Each UID in the UID type that you specify must match -the same UID in the UID type of the DLL. If you specify KNullUid for -any of the three UIDs in your UID type, there is a match.

  4. -
  5. If the search has found -no DLLs, the load fails.

  6. -
  7. The loader then selects -those DLLs that have platform security capabilities that match or exceed those -of the process . This selection operation can decrease the set of possible -DLLs. If there are no DLLs in the set the load fails.

  8. -
  9. If the search has found -no DLLs, the load fails.

  10. -
  11. If you specify a version -number in RLibrary::Load(), the loader selects a version -of the DLL from the set. The following flowchart shows how the loader selects -the DLL from the set of possible DLLs.

    - -
  12. -
  13. If there are no DLLs -that meet the requirements, the load fails.

  14. -
  15. If you do not specify -a version number in RLibrary::Load(), the loader loads -the DLL with the highest version. A version N.n is higher -than version M.m, if (N>M or (N==M and n>m)).

  16. -
  17. If all DLLs have the -same version, the loader loads the DLL found first.

  18. -
+ + + + + +Loader +Search RulesThis topic provides a summary of the rules that the loader follows +to search for EXEs and DLLs. +
    +
  • Search rules for an EXE

  • +
  • Search rules for a DLL in the import table of an EXE or another DLL

  • +
  • Search rules for a DLL loaded from a program

  • +
+
Search rules +for an EXE

To start a new process, call RProcess::Create().

RProcess::Create() loads +the EXE specified in the input parameters. The function then looks through +the import table of the EXE to get a list of DLLs that the EXE references. +The loader uses the list of DLLs in the import table to load the DLLs. If +DLLs reference other DLLS, the loader uses the same method to load those DLLs. +See Search +rules for a DLL listed in the import table of an EXE.

The result +of a search for an EXE depends on:

    +
  • the name of the EXE. +You provide this information.

  • +
  • the UID type : you provide. +This is optional

  • +
  • the version of the EXEs +on the device

  • +

You pass the name of the EXE in the first parameter of RProcess::Create(). +You have a number of choices:

    +
  • you can specify the +file name only. The loader will assume a .exe file extension. +For example:

    efile

  • +
  • you can specify a filename +and an extension. For example:

    efile.exe

  • +
  • you can put a path in +front of the file name. A path has limited use, because the loader can load +EXEs only from the directory \sys\bin, or from subdirectories +of \sys\bin.

  • +

The +search procedure

The loader searches for EXEs with the given name +and extension. More than one EXE with the given name and extension can exist +on a device.

    +
  1. If you do not provide +a path, the loader searches the \sys\bin directory on +all drives. The loader searches drives in the order Y:, X: ... B:, A:. The Z: drive is searched last. Subdirectories of \sys\bin are +not searched.

    If you provide a path, there are only three useful cases:

      +
    • to limit the search +to a specific drive. For example:

      X:\sys\bin

      where X: can +be one of the drives A: to Z:.

    • +
    • to limit the search +to a subdirectory of \sys\bin on a specific drive. For +example:

      X:\sys\bin\aaa\bbb

      The use +of subdirectories in \sys\bin is not common.

      where X: +can be one of the drives A: to Z:.

    • +
    • to limit the search +to a subdirectory of \sys\bin on all drives. For example:

      \sys\bin\aaa\bbb

      The +loader searches all drives in the order Y:, X: ... B:, A:. +The Z: drive is searched last.

      The use of subdirectories +in \sys\bin is not common.

    • +

    The loader cannot load EXEs from other directories, because system +security prevents it.

  2. +
  3. The loader compares +the UID type (TUidType) of each EXE in the list with the +UID type you specify in RProcess::Create(). The UID type +is a set of three UIDs. Each UID in the UID type that you specify must match +the same UID in the UID type of the EXE. If you specify KNullUid for +any of the three UIDs in your UID type, a match is automatic.

  4. +
  5. If the search has found +no EXEs, the load fails.

  6. +
  7. If the search has found +one EXE only, the loader loads that EXE.

  8. +
  9. If more than one EXE +has been found, the loader loads the EXE with the highest version. A version N.n is +higher than version M.m if (N>M or (N==M and n>m)).

  10. +
  11. If all EXEs have the +same version, the loader loads the version found first.

  12. +
+
Search rules +for a DLL in the import table of an EXE or another DLL

After the +loader has selected the EXE, the loader loads all DLLs in the import table. +This is also called static linkage.

The import table contains the +name and extension of each DLL. The import table also contains the version +of each DLL and the 3rd UID that identifies each DLL. The version information +is stored in the import table when the executable file is built. All DLLs +have an ordered set of three UIDs. The third UID gives a unique identity to +the DLL. See UID protection.

The search procedure

The search uses the following procedure +for each DLL:

    +
  1. The loader searches +the \sys\bin directory on all drives for all DLLs that +have the filename and extension. The loader searches drives in the order Y:, X: ... B:, A:. The Z: drive is searched +last. Subdirectories of \sys\bin are not searched. The +loader searches for all versions of the DLL. If the loader finds the same +version of a DLL on more than one drive, the loader only adds the first one +to the set of possible DLLs. For example, if version 2.1 of a DLL is on drive D: and +on drive Z:, only the version on drive D: is +added to the set of possible DLLs.

    The loader cannot load DLLs from +other directories, because system security prevents it.

    [Before December +2007, the loader had different behaviour. The loader searched the drive from +which the EXE was loaded before the loader checked the other drives. For example, +if the EXE was loaded from drive Z:, and version 2.1 +of a DLL was on drive D: and drive Z:, +the loader selected the version of the DLL that was on drive Z:.]

  2. +
  3. The loader then selects +those DLLs that have the same 3rd UID from the set of possible DLLs. This +operation can decrease the set of possible DLLs. If there are no DLLs in the +set, the load fails.

  4. +
  5. The loader then selects +those DLLs that have platform security capabilities that match or exceed those +of the EXE. This selection operation can decrease the set of possible DLLs. +If there are no DLLs in the set the load fails.

    See also : Platform +security.

  6. +
  7. Each DLL in the import +table of the EXE has a version number. This number is the version of the DLL +to which the EXE is linked. The loader uses the version number in the import +table to select the correct version of the DLL. The following flowchart shows +how the loader selects the DLL from the set of possible DLLs.

    + +
  8. +
  9. If there are no DLLs +that meet the requirements, the load fails.

  10. +
+
Search rules +for a DLL loaded from a program

To load a DLL from a program, call RLibrary::Load(). +This is known as dynamic linking.

RLibrary::Load() loads +the DLL specified in the input parameters. The function then uses the import +table to get a list of referred DLLs. The loader loads the DLLs in the list +and uses the same search method that the loader uses for EXEs. See Search rules for a DLL in the import table of an EXE.

The +result of a search for an DLL depends on:

    +
  • the name of the DLL. +You provide this information.

  • +
  • the UID type : you provide. +This is optional.

  • +
  • the required version +: you provide. This is optional.

  • +
  • the version of the DLLs +on the device.

  • +

You pass the name of the DLL in the first parameter of RLibrary::Load(). +You have a number of choices:

    +
  • you can specify the +file name only. The loader will assume a .dll file extension. +For example:

    efsrv

  • +
  • you can specify a filename +and an extension. For example:

    efsrv.dll

  • +
  • you can put a path in +front of the file name. A path has limited use, because the loader can load +DLLs only from the directory \sys\bin, or from subdirectories +of \sys\bin.

  • +

See Dynamically +loading link libraries and Using +ECom.

The +search procedure

The loader searches for DLLs with the given name +and extension. More than one DLL with the given name and extension can exist +on a device.

    +
  1. If you do not provide +a path, the loader searches the \sys\bin directory on +all drives. The loader searches drives in the order Y:, X: ... B:, A:. The Z: drive is searched last. Subdirectories of \sys\bin are +not searched.

    If you provide a path, there are only three useful cases:

      +
    • to limit the search +to a specific drive. For example:

      X:\sys\bin

      where X: can +be one of the drives A: to Z:.

    • +
    • to limit the search +to a subdirectory of \sys\bin on a specific drive. For +example:

      X:\sys\bin\aaa\bb

      The use +of subdirectories in \sys\bin is not common.

      where X: can +be one of the drives A: to Z:.

    • +
    • to limit the search +to a subdirectory of \sys\bin on all drives. For example:

      \sys\bin\aaa\bbb

      The +loader searches all drives in the order Y:, X: ... B:, A:. +The Z: drive is searched last.

      The use of subdirectories +in \sys\bin is not common.

    • +

    System security prevents the loader from loading DLLs from any other +directories.

  2. +
  3. The loader compares +the UID type (TUidType) of each DLL in the list with the +UID type you specify in RLibrary::Load(). The UID type +is a set of three UIDs. Each UID in the UID type that you specify must match +the same UID in the UID type of the DLL. If you specify KNullUid for +any of the three UIDs in your UID type, there is a match.

  4. +
  5. If the search has found +no DLLs, the load fails.

  6. +
  7. The loader then selects +those DLLs that have platform security capabilities that match or exceed those +of the process . This selection operation can decrease the set of possible +DLLs. If there are no DLLs in the set the load fails.

  8. +
  9. If the search has found +no DLLs, the load fails.

  10. +
  11. If you specify a version +number in RLibrary::Load(), the loader selects a version +of the DLL from the set. The following flowchart shows how the loader selects +the DLL from the set of possible DLLs.

    + +
  12. +
  13. If there are no DLLs +that meet the requirements, the load fails.

  14. +
  15. If you do not specify +a version number in RLibrary::Load(), the loader loads +the DLL with the highest version. A version N.n is higher +than version M.m, if (N>M or (N==M and n>m)).

  16. +
  17. If all DLLs have the +same version, the loader loads the DLL found first.

  18. +
\ No newline at end of file