forked from Pissandshittium/pissandshittium
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
HandleWin is a wrapper around a Windows HANDLE that can be transported across IPC channels that support attachment brokering. The attachment broker is responsible for duplicating the HANDLE into the destination process. BUG=493414 Review URL: https://codereview.chromium.org/1281083004 Cr-Commit-Position: refs/heads/master@{#342897}
- Loading branch information
Showing
11 changed files
with
179 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
// Copyright 2015 The Chromium Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
|
||
#include "ipc/handle_win.h" | ||
|
||
#include "base/logging.h" | ||
#include "base/memory/ref_counted.h" | ||
#include "base/strings/string_number_conversions.h" | ||
#include "ipc/handle_attachment_win.h" | ||
|
||
namespace IPC { | ||
|
||
HandleWin::HandleWin(const HANDLE& handle, Permissions permissions) | ||
: handle_(handle), permissions_(permissions) {} | ||
|
||
// static | ||
void ParamTraits<HandleWin>::Write(Message* m, const param_type& p) { | ||
scoped_refptr<IPC::internal::HandleAttachmentWin> attachment( | ||
new IPC::internal::HandleAttachmentWin(p.get_handle(), | ||
p.get_permissions())); | ||
if (!m->WriteAttachment(attachment.Pass())) | ||
NOTREACHED(); | ||
} | ||
|
||
// static | ||
bool ParamTraits<HandleWin>::Read(const Message* m, | ||
base::PickleIterator* iter, | ||
param_type* r) { | ||
scoped_refptr<MessageAttachment> attachment; | ||
if (!m->ReadAttachment(iter, &attachment)) | ||
return false; | ||
if (attachment->GetType() != MessageAttachment::TYPE_BROKERABLE_ATTACHMENT) | ||
return false; | ||
BrokerableAttachment* brokerable_attachment = | ||
static_cast<BrokerableAttachment*>(attachment.get()); | ||
if (brokerable_attachment->GetBrokerableType() != | ||
BrokerableAttachment::WIN_HANDLE) { | ||
return false; | ||
} | ||
IPC::internal::HandleAttachmentWin* handle_attachment = | ||
static_cast<IPC::internal::HandleAttachmentWin*>(brokerable_attachment); | ||
r->set_handle(handle_attachment->get_handle()); | ||
return true; | ||
} | ||
|
||
// static | ||
void ParamTraits<HandleWin>::Log(const param_type& p, std::string* l) { | ||
l->append(base::StringPrintf("0x%X", p.get_handle())); | ||
l->append(base::IntToString(p.get_permissions())); | ||
} | ||
|
||
} // namespace IPC |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
// Copyright 2015 The Chromium Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
|
||
#ifndef IPC_HANDLE_WIN_H_ | ||
#define IPC_HANDLE_WIN_H_ | ||
|
||
#include <windows.h> | ||
|
||
#include "ipc/ipc_export.h" | ||
#include "ipc/ipc_message_macros.h" | ||
|
||
namespace IPC { | ||
|
||
// HandleWin is a wrapper around a Windows HANDLE that can be transported | ||
// across Chrome IPC channels that support attachment brokering. The HANDLE will | ||
// be duplicated into the destination process. | ||
class IPC_EXPORT HandleWin { | ||
public: | ||
enum Permissions { | ||
// A placeholder value to be used by the receiving IPC channel, since the | ||
// permissions information is only used by the broker process. | ||
INVALID, | ||
// The new HANDLE will have the same permissions as the old HANDLE. | ||
DUPLICATE, | ||
// The new HANDLE will have file read and write permissions. | ||
FILE_READ_WRITE, | ||
MAX_PERMISSIONS = FILE_READ_WRITE | ||
}; | ||
|
||
HandleWin(const HANDLE& handle, Permissions permissions); | ||
|
||
HANDLE get_handle() const { return handle_; } | ||
void set_handle(HANDLE handle) { handle_ = handle; } | ||
Permissions get_permissions() const { return permissions_; } | ||
|
||
private: | ||
HANDLE handle_; | ||
Permissions permissions_; | ||
}; | ||
|
||
template <> | ||
struct IPC_EXPORT ParamTraits<HandleWin> { | ||
typedef HandleWin param_type; | ||
static void Write(Message* m, const param_type& p); | ||
static bool Read(const Message* m, base::PickleIterator* iter, param_type* p); | ||
static void Log(const param_type& p, std::string* l); | ||
}; | ||
|
||
} // namespace IPC | ||
|
||
#endif // IPC_HANDLE_WIN_H_ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters