| Index: sandbox/win/src/service_resolver_64.cc
|
| diff --git a/sandbox/win/src/service_resolver_64.cc b/sandbox/win/src/service_resolver_64.cc
|
| index 96124187deb4b383708bca09645f81f3bced75f9..79c6b16ebef7c540462d80697f29ffac4548a2c7 100644
|
| --- a/sandbox/win/src/service_resolver_64.cc
|
| +++ b/sandbox/win/src/service_resolver_64.cc
|
| @@ -116,6 +116,30 @@ size_t ServiceResolverThunk::GetThunkSize() const {
|
| return sizeof(ServiceFullThunk);
|
| }
|
|
|
| +NTSTATUS ServiceResolverThunk::CopyThunk(const void* target_module,
|
| + const char* target_name,
|
| + BYTE* thunk_storage,
|
| + size_t storage_bytes,
|
| + size_t* storage_used) {
|
| + NTSTATUS ret = ResolveTarget(target_module, target_name, &target_);
|
| + if (!NT_SUCCESS(ret))
|
| + return ret;
|
| +
|
| + size_t thunk_bytes = GetThunkSize();
|
| + if (storage_bytes < thunk_bytes)
|
| + return STATUS_UNSUCCESSFUL;
|
| +
|
| + ServiceFullThunk* thunk = reinterpret_cast<ServiceFullThunk*>(thunk_storage);
|
| +
|
| + if (!IsFunctionAService(&thunk->original))
|
| + return STATUS_UNSUCCESSFUL;
|
| +
|
| + if (NULL != storage_used)
|
| + *storage_used = thunk_bytes;
|
| +
|
| + return ret;
|
| +}
|
| +
|
| bool ServiceResolverThunk::IsFunctionAService(void* local_thunk) const {
|
| ServiceFullThunk function_code;
|
| SIZE_T read;
|
|
|