mirror of
https://github.com/winfsp/winfsp.git
synced 2025-07-03 09:22:57 -05:00
launcher, launchctl: refactoring
This commit is contained in:
@ -374,40 +374,6 @@ exit:
|
||||
return Result;
|
||||
}
|
||||
|
||||
NTSTATUS SvcInstanceGetNameList(HANDLE ClientToken,
|
||||
PWSTR Buffer, PULONG PSize)
|
||||
{
|
||||
SVC_INSTANCE *SvcInstance;
|
||||
PLIST_ENTRY ListEntry;
|
||||
PWSTR P = Buffer, BufferEnd = P + *PSize / sizeof(WCHAR);
|
||||
ULONG ClassNameSize, InstanceNameSize;
|
||||
|
||||
EnterCriticalSection(&SvcInstanceLock);
|
||||
|
||||
for (ListEntry = SvcInstanceList.Flink;
|
||||
&SvcInstanceList != ListEntry;
|
||||
ListEntry = ListEntry->Flink)
|
||||
{
|
||||
SvcInstance = CONTAINING_RECORD(ListEntry, SVC_INSTANCE, ListEntry);
|
||||
|
||||
ClassNameSize = lstrlenW(SvcInstance->ClassName) + 1;
|
||||
InstanceNameSize = lstrlenW(SvcInstance->InstanceName) + 1;
|
||||
|
||||
if (BufferEnd < P + ClassNameSize + InstanceNameSize)
|
||||
break;
|
||||
|
||||
memcpy(P, SvcInstance->ClassName, ClassNameSize * sizeof(WCHAR)); P += ClassNameSize;
|
||||
*Buffer++ = L' ';
|
||||
memcpy(P, SvcInstance->InstanceName, InstanceNameSize * sizeof(WCHAR)); P += InstanceNameSize;
|
||||
}
|
||||
|
||||
LeaveCriticalSection(&SvcInstanceLock);
|
||||
|
||||
*PSize = (ULONG)(P - Buffer);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
NTSTATUS SvcInstanceGetInfo(HANDLE ClientToken,
|
||||
PWSTR ClassName, PWSTR InstanceName, PWSTR Buffer, PULONG PSize)
|
||||
{
|
||||
@ -453,6 +419,40 @@ exit:
|
||||
return Result;
|
||||
}
|
||||
|
||||
NTSTATUS SvcInstanceGetNameList(HANDLE ClientToken,
|
||||
PWSTR Buffer, PULONG PSize)
|
||||
{
|
||||
SVC_INSTANCE *SvcInstance;
|
||||
PLIST_ENTRY ListEntry;
|
||||
PWSTR P = Buffer, BufferEnd = P + *PSize / sizeof(WCHAR);
|
||||
ULONG ClassNameSize, InstanceNameSize;
|
||||
|
||||
EnterCriticalSection(&SvcInstanceLock);
|
||||
|
||||
for (ListEntry = SvcInstanceList.Flink;
|
||||
&SvcInstanceList != ListEntry;
|
||||
ListEntry = ListEntry->Flink)
|
||||
{
|
||||
SvcInstance = CONTAINING_RECORD(ListEntry, SVC_INSTANCE, ListEntry);
|
||||
|
||||
ClassNameSize = lstrlenW(SvcInstance->ClassName) + 1;
|
||||
InstanceNameSize = lstrlenW(SvcInstance->InstanceName) + 1;
|
||||
|
||||
if (BufferEnd < P + ClassNameSize + InstanceNameSize)
|
||||
break;
|
||||
|
||||
memcpy(P, SvcInstance->ClassName, ClassNameSize * sizeof(WCHAR)); P += ClassNameSize;
|
||||
*Buffer++ = L' ';
|
||||
memcpy(P, SvcInstance->InstanceName, InstanceNameSize * sizeof(WCHAR)); P += InstanceNameSize;
|
||||
}
|
||||
|
||||
LeaveCriticalSection(&SvcInstanceLock);
|
||||
|
||||
*PSize = (ULONG)(P - Buffer);
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static HANDLE SvcThread, SvcEvent;
|
||||
static HANDLE SvcPipe = INVALID_HANDLE_VALUE;
|
||||
static OVERLAPPED SvcOverlapped;
|
||||
@ -735,13 +735,6 @@ static VOID SvcPipeTransact(HANDLE ClientToken, PWSTR PipeBuf, PULONG PSize)
|
||||
SvcPipeTransactResult(Result, PipeBuf, PSize);
|
||||
break;
|
||||
|
||||
case LauncherSvcInstanceList:
|
||||
*PSize = PIPE_BUFFER_SIZE - 1;
|
||||
Result = SvcInstanceGetNameList(ClientToken, PipeBuf + 1, PSize);
|
||||
|
||||
SvcPipeTransactResult(Result, PipeBuf, PSize);
|
||||
break;
|
||||
|
||||
case LauncherSvcInstanceInfo:
|
||||
ClassName = SvcPipeTransactGetPart(&P, PipeBufEnd);
|
||||
InstanceName = SvcPipeTransactGetPart(&P, PipeBufEnd);
|
||||
@ -756,6 +749,13 @@ static VOID SvcPipeTransact(HANDLE ClientToken, PWSTR PipeBuf, PULONG PSize)
|
||||
SvcPipeTransactResult(Result, PipeBuf, PSize);
|
||||
break;
|
||||
|
||||
case LauncherSvcInstanceList:
|
||||
*PSize = PIPE_BUFFER_SIZE - 1;
|
||||
Result = SvcInstanceGetNameList(ClientToken, PipeBuf + 1, PSize);
|
||||
|
||||
SvcPipeTransactResult(Result, PipeBuf, PSize);
|
||||
break;
|
||||
|
||||
default:
|
||||
SvcPipeTransactResult(STATUS_INVALID_PARAMETER, PipeBuf, PSize);
|
||||
break;
|
||||
|
Reference in New Issue
Block a user