Android Binder compensation de l'identité de l'appelant
récemment, j'ai lu Android
les codes sources et j'ai trouvé qu'une paire de méthodes sont toujours appelées en faisant un appel Binder
IPC. J'ai lu le commentaire, mais je ne peux pas clairement connaître la raison fondamentale. La paire de méthode est la suivante:
final long origId = Binder.clearCallingIdentity();
//other local method.
Binder.restoreCallingIdentity(origId);
est-ce que quelqu'un sait quelle est la fonction de cette paire de méthode? Il semble se rapporter à l'autorisation.
2 réponses
Je ne pense pas pouvoir répondre mieux que la description dans L'API officielle: http://developer.android.com/reference/android/os/Binder.html
public static final long clearCallingIdentity ()
réinitialise l'identité de la CIB entrante sur le thread courant. Cela peut être utile si, lors du traitement d'un appel entrant, vous faites appel à des interfaces d'autres objets qui peuvent être locaux à votre processus et que vous avez besoin de faire des vérifications de permission. sur les appels entrant en eux (afin qu'ils vérifient la permission de votre propre processus local, et pas n'importe quel processus à l'origine appelé vous).
bien que la question soit ancienne, il vaut la peine de mettre plus de détails en plus de la description officielle de la méthode.
Outre (ou avec) la CIB, le rôle clé du cadre Binder
dans Android
est la sécurité.
chaque transaction Binder
s'exécute sous l'identité (PID et UID) du processus d'appel ( appelant ) afin que le processus appelé ( callee ) puisse inspecter les permissions du processus appelant et décider si la méthode demandée peut être exécutée.
si une telle transaction doit être (temporaire) en cours sous l'identité calle's , l'identité caller's peut être effacé et plus tard restauré avec les appels à Binder.clearCallingIdentity()
et Binder.restoreCallingIdentity(long)
" respectivement. Entre les appels, les permissions de callee seront vérifiées.
comme un exemple tenir compte des services du système (emplacement AOSP: /frameworks/base/services/java/com/android/server
). Dans le cadre du processus system_server
, UID=1000
, les services peuvent temporairement effacer l'identité de l'appelant afin de passer les contrôles d'autorisation.