From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- .../content_analysis_sdk/common/utils_win.h | 76 ++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 third_party/content_analysis_sdk/common/utils_win.h (limited to 'third_party/content_analysis_sdk/common/utils_win.h') diff --git a/third_party/content_analysis_sdk/common/utils_win.h b/third_party/content_analysis_sdk/common/utils_win.h new file mode 100644 index 0000000000..93b9b379f2 --- /dev/null +++ b/third_party/content_analysis_sdk/common/utils_win.h @@ -0,0 +1,76 @@ +// Copyright 2022 The Chromium Authors. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Utility and helper functions common to both the agent and browser code. +// This code is not publicly exposed from the SDK. + +#ifndef CONTENT_ANALYSIS_COMMON_UTILS_WIN_H_ +#define CONTENT_ANALYSIS_COMMON_UTILS_WIN_H_ + +#include + +namespace content_analysis { +namespace sdk { +namespace internal { + +// The default size of the buffer used to hold messages received from +// Google Chrome. +const DWORD kBufferSize = 4096; + +// Named pipe prefixes used for agent and client side of pipe. +constexpr char kPipePrefixForAgent[] = R"(\\.\\pipe\)"; +constexpr char kPipePrefixForClient[] = R"(\Device\NamedPipe\)"; + +// Returns the user SID of the thread or process that calls thie function. +// Returns an empty string on error. +std::string GetUserSID(); + +// Returns the name of the pipe that should be used to communicate between +// the agent and Google Chrome. If `sid` is non-empty, make the pip name +// specific to that user. +// +// GetPipeNameForAgent() is meant to be used in the agent. The returned +// path can be used with CreatePipe() below. GetPipeNameForClient() is meant +// to be used in the client. The returned path can only be used with +// NtCreateFile() and not CreateFile(). +std::string GetPipeNameForAgent(const std::string& base, bool user_specific); +std::string GetPipeNameForClient(const std::string& base, bool user_specific); + +// Creates a named pipe with the give name. If `is_first_pipe` is true, +// fail if this is not the first pipe using this name. +// +// This function create a pipe whose DACL allow full control to the creator +// owner and administrators. If `user_specific` the DACL only allows the +// logged on user to read from and write to the pipe. Otherwise anyone logged +// in can read from and write to the pipe. +// +// A handle to the pipe is retuned in `handle`. +DWORD CreatePipe(const std::string& name, + bool user_specific, + bool is_first_pipe, + HANDLE* handle); + +// Returns the full path to the main binary file of the process with the given +// process ID. +bool GetProcessPath(unsigned long pid, std::string* binary_path); + +// A class that scopes the creation and destruction of an OVERLAPPED structure +// used for async IO. +class ScopedOverlapped { + public: + ScopedOverlapped(); + ~ScopedOverlapped(); + + bool is_valid() { return overlapped_.hEvent != nullptr; } + operator OVERLAPPED*() { return &overlapped_; } + + private: + OVERLAPPED overlapped_; +}; + +} // internal +} // namespace sdk +} // namespace content_analysis + +#endif // CONTENT_ANALYSIS_COMMON_UTILS_WIN_H_ \ No newline at end of file -- cgit v1.2.3