Native Binder Service开发中获取Process进程名和调用者的进程名
前言
在 Native Binder Service开发中过程中,有时希望获取Process进程名和调用者的进程名,进而做一些权限方面的限制,譬如值允许某一个进程名使用或者调用。下面代码展示了如何做到上述的要求。
Native Binder Service开发中获取Process进程名
//获取当前进程的进程名
static int getCurrentPackageName(char *processName)
{
long pid = 0;
pid = getpid();
int ret;
char cmdline[256] = {0};
char buf[128] = {0};
sprintf(cmdline, "/proc/%d/cmdline", pid);
int fd =0;
fd = open(cmdline, O_RDONLY);
if (fd < 0)
{
LOGD("PERSSION","open /proc/xxx/cmdline error");
return -1;
}
ret = read(fd, buf, sizeof(buf));
if (ret <= 0)
{
LOGD("PERSSION","read /proc/xxx/cmdline error");
close(fd);
return -1;
}
close(fd);
LOGD("PERSSION","current pid = %d , package name = %s", getpid(), buf);
strcpy(processName,buf);
return 0;
}
Native Binder Service开发中获取调用Process进程名
//获取调用者的进程的进程名
static int getCallPackageName(char *processName)
{
long pid = 0;
pid = IPCThreadState::self()->getCallingPid();
int ret;
char cmdline[256] = {0};
char buf[128] = {0};
sprintf(cmdline, "/proc/%d/cmdline", pid);
int fd =0;
fd = open(cmdline, O_RDONLY);
if (fd < 0)
{
LOGD("PERSSION","open /proc/xxx/cmdline error");
return -1;
}
ret = read(fd, buf, sizeof(buf));
if (ret <= 0)
{
LOGD("PERSSION","read /proc/xxx/cmdline error");
close(fd);
return -1;
}
close(fd);
LOGD("PERSSION","current pid = %d , package name = %s", getpid(), buf);
strcpy(processName,buf);
return 0;
}
上述代码非常简单,就不一一详细解释了,聪明的你应该很容易理解并用到实际项目中的。