diff --git a/interfaces/innerkits/libdbinder/include/dbinder_service.h b/interfaces/innerkits/libdbinder/include/dbinder_service.h index 0b09341c2ab244598fe76b58dc5d2b654799e715..cd36954ece688c57bdc84c9c3ff743a469de38bc 100755 --- a/interfaces/innerkits/libdbinder/include/dbinder_service.h +++ b/interfaces/innerkits/libdbinder/include/dbinder_service.h @@ -104,6 +104,8 @@ public: sptr MakeRemoteBinder(const std::u16string &serviceName, const std::string &deviceID, binder_uintptr_t binderObject, uint64_t pid = 0); bool RegisterRemoteProxy(std::u16string serviceName, sptr binderObject); + bool RegisterRemoteProxy(std::u16string serviceName, int32_t systemAbilityId); + bool RegisterRemoteProxyInner(std::u16string serviceName, binder_uintptr_t binder); bool OnRemoteMessageTask(const struct DHandleEntryTxRx *message); std::shared_ptr QuerySessionObject(binder_uintptr_t stub); bool DetachDeathRecipient(sptr object); diff --git a/services/dbinder/dbinder_service/src/dbinder_service.cpp b/services/dbinder/dbinder_service/src/dbinder_service.cpp index 761959f8ab475901981290c522533aff11c0a118..2e186912928be1c3679331052e4a4f3d25838b78 100755 --- a/services/dbinder/dbinder_service/src/dbinder_service.cpp +++ b/services/dbinder/dbinder_service/src/dbinder_service.cpp @@ -555,9 +555,25 @@ bool DBinderService::RegisterRemoteProxy(std::u16string serviceName, sptr lockGuard(remoteBinderMutex_); +bool DBinderService::RegisterRemoteProxy(std::u16string serviceName, int32_t systemAbilityId) +{ + DBINDER_LOGI("register remote proxy, service name = %{public}s", Str16ToStr8(serviceName).c_str()); + + if (serviceName.length() == 0 || systemAbilityId <= 0) { + DBINDER_LOGE("serviceName.length() = %zu", serviceName.length()); + return false; + } + + binder_uintptr_t binder = (binder_uintptr_t)systemAbilityId; + return RegisterRemoteProxyInner(serviceName, binder); +} +bool DBinderService::RegisterRemoteProxyInner(std::u16string serviceName, binder_uintptr_t binder) +{ + std::unique_lock lockGuard(remoteBinderMutex_); // clear historical remnants, Don't care if it succeeds (void)mapRemoteBinderObjects_.erase(serviceName); auto result = mapRemoteBinderObjects_.insert(std::pair(serviceName, binder));