Chromium Code Reviews| Index: sandbox/win/src/service_resolver_32.cc |
| diff --git a/sandbox/win/src/service_resolver_32.cc b/sandbox/win/src/service_resolver_32.cc |
| index 2e69dbc9e7e083b74e8f4db47f7e257ce29acf7f..b7539560b71de103c76c40332d3705c5b36d64aa 100644 |
| --- a/sandbox/win/src/service_resolver_32.cc |
| +++ b/sandbox/win/src/service_resolver_32.cc |
| @@ -179,6 +179,26 @@ size_t ServiceResolverThunk::GetThunkSize() const { |
| return offsetof(ServiceFullThunk, internal_thunk) + GetInternalThunkSize(); |
| } |
| +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(); |
|
rvargas (doing something else)
2014/03/03 22:36:46
Did you mean to compare this against storage_bytes
Cait (Slow)
2014/03/04 15:43:56
Done.
|
| + ServiceFullThunk* thunk = reinterpret_cast<ServiceFullThunk*>(thunk_storage); |
| + |
| + if (!IsFunctionAService(&thunk->original) && |
| + (!relaxed_ || !SaveOriginalFunction(&thunk->original, thunk_storage))) { |
| + return STATUS_UNSUCCESSFUL; |
| + } |
| + |
| + return ret; |
| +} |
| + |
| bool ServiceResolverThunk::IsFunctionAService(void* local_thunk) const { |
| ServiceEntry function_code; |
| SIZE_T read; |