--- /dev/null
+#include <msp/core/systemerror.h>
+#include "handle.h"
+#include "handle_private.h"
+
+namespace Msp {
+namespace IO {
+
+Handle::operator const void *() const
+{
+ return priv->handle!=INVALID_HANDLE_VALUE ? this : 0;
+}
+
+
+void sys_set_blocking(Handle &, bool)
+{
+}
+
+unsigned sys_read(Handle &handle, char *buf, unsigned size)
+{
+ DWORD ret;
+ if(ReadFile(*handle, buf, size, &ret, 0)==0)
+ throw system_error("ReadFile");
+
+ return ret;
+}
+
+unsigned sys_write(Handle &handle, const char *buf, unsigned size)
+{
+ DWORD ret;
+ if(WriteFile(*handle, buf, size, &ret, 0)==0)
+ throw system_error("WriteFile");
+
+ return ret;
+}
+
+void sys_close(Handle &handle)
+{
+ CloseHandle(*handle);
+}
+
+} // namespace IO
+} // namespace Msp