user mode driver (umdf) c++ http request - c++

I have developed a umdf2 driver and in some point it needs to communicate to a remote server to fetch some data. I am wondering is there any easy way (e.g. library) to do the http requests (GET, POST) in Windows user mode? I have never used winsock2 and I am not sure how easy/possible it's to use it?
Currently, I am using a kind of Pipe to hand this job to another app that resides upper level and uses Windows SDK to do this smoothly.
Any advice is greatly appreciated.

WinHTTP: https://learn.microsoft.com/en-us/windows/win32/winhttp/winhttp-start-page
filler filler filler

Related

How to implement secure socket communication in c++ application using winsock?

I am trying to implement secure communication between a server and client in c++. The limitation is that both the client and server must run on windows and have to be in c++. This is for a research project I am working on at my university.
So far I have found that SChannel is the best option, but the documentation is extremely confusing and I can not find any guides/tutorials on how to use it. I have already looked at this link https://learn.microsoft.com/en-us/windows/desktop/secauthn/creating-a-secure-connection-using-schannel but still do not understand how to get it working. Could someone guide me through this if this is the best way?
I also looked into use SSLStream using the CLR to have .net run inside of a c++ application. However I can not use this because the client application is threaded and threads can't be used with CLR.
I already have a dummy client and server set up with communication between the two, I am just trying to secure and encrypt that communication.
Any help is greatly appreciated!
Whichever SSL library you choose to use there are a few things you need to know as a beginner in this field:
The server and client implementations will end up looking quite different in places.
Your server is absolutely going to need a certificate with a private key. During development you clearly don't want to get one from Verisign or something so you need to create a self-signed certificate. You can do this with openssl or other tools.
The certificate consists of a private part and a public part. The public part needs to go to the client, and will be used to validate the connection. When you are using something like SChannel the certificates (private and public) will need to be installed in the certificate stores of the server and client respectively.
SChannel does not send or receive data for you. So the core of your implementation is going to be: when the network has data: read ciphertext from socket and write to SChannel. Read clear text from SChannel (if any) and pass to application. When the application has data to send, get clear text from Application and pass to SChannel. Get the resulting ciphertext buffers from SChannel and write to the socket.
buffers from the internet may be partial, and negotiations and re-negotiations means there's no 1:1 mapping of passing data into SChannel and getting data out.
You therefore can't get away with a naive implementation that calls SChannel once to pass data in, and once again to get un/encrypted data. There will potentially be nothing available, or a whole lot of packets to send between the client and the server, before you'll get any application bytes. i.e. You will need some kind of state machine to keeptrack of this.
Obviously, don't write both the client and server at the same time: Start with your client against an https server.
That's the general outline of the process - the things that confused me when I first encountered SSL and why none of the samples were nearly as simple as I had hoped them to be.

sending simple int from UWP app to another program

I'm lost at a seemlingly minor problem. I have a UWP app from windows samples, which counts the faces detected by the camera. I want that app to send that number to another program. I've tried doing it by clipboard, however as the other program is constantly checking the clipboard it wouldn't work.
Then I thought of a simple socket connection but I can't seem to get it working in UWP as all infos seem to be in C# not C++.
Can someone gimme a hint how to send a single int over a tcp socket to another client?
Or any other suggestions how to achieve that?
I'm really desperate...
thanks in advance.
In UWP, app services are the standard way of communicating between apps. You need to create an app service in the source app then consume the service in the second one. The app service also can be consumed by non-UWP apps.

Progressive-download video-streaming C++

Can someone give me some hints on using http progressive download in non http applications. I need to stream some video frames to a client application and display them. I need to develop the server side application and the client side application. I presume that the server side isn't too hard( I just receive a request and start transferring ). The client side is the problem for me. How can I approach this problem with regards to:
caching ( need some sort of caching in file )
indexing( the user must be able to salt to a specific time )
clean up( when to discard the file )
Shortly, I need an application in C++ that replicates the behavior of flash player.

C++ code on server, running on client machine

Is it possible to write C++ code to interface with a server, but to be executed on client side, but on the browser instead of native?
Like, for example, imagine using open source classes so that you produce a file.
But because you don't want all this work to be done on the server, you run it on the browser.
So that the client gives a file or two or more as inputs, then the code runs on his machine, the final result is produced, then this file is uploaded to database on the server.
please see google native client project. http://code.google.com/p/nativeclient/
This is strange question.
You can prepare binaries that do task that you want done on client side and make server send proper binary to client when asked for it. Client then runs this binary and returns results to server.
It is possible if you know configurations of client machines (binaries must work on them). Also it have to be some security layer implemented - you don't want to allow every binary run on client (imagine man-in-the-middle attack when some malicious code is run on client).
I think your request contradicts with the idea behind server-side programming. The main purpose in using server-side programs is to make use of infrastructural components like database, network, etc. in a controlled manner. (The most typical usage of server-side applications are web sites with server side coding like JSP and ASP.)
Since servers are machines that are to be kept secure, a remote application should not be permitted to make changes or access filesystem freely. If you want to do changes on a server like doing database operations or reading/writing files, you should use applications that run on the server or provide interfaces like web services or web sites to remote client applications.
So there are a couple solutions when if you want to do work on the browser, then have the results posted in a server database.
First of all, you must set up your server ready for database work. I have done this using the MEAN stack, set up a MongoDB and interfaced it with the Mongoose API.
Now, for the meat of the question, there are many examples of browsers doing intensive work. The majority of these applications thought is not C++, but it is Javascript.
If you really want to focus on C++ (like i did in the past, in the time i asked this question, wanting to make something big for college), then you could do one of the following:
*Use Google Native Client (NaCl). This is a sandbox for running compiled C and C++ code in the browser efficiently and securely, independent of the user’s operating system.
*Maybe you should want to check out Emscripten, which is a framwork for translating C and C++ code to jaascript. This way, you can have your C or C++ binaries that worked, and have them translated to Javascript, in order to have them work in the browser too.

Rails WebService and C++ application to expose

(Sorry for my english)
First: I have an application created using C++ (this is for performance needs), this application uses an image to make some processing and returns a simple answer (1 or 0 ).
Now I need to expose this application from a webservice.
I think to create a webservice using Rails, but I don't know if it's possible using rails to call the C++ process..
The idea is to use the webservice to get an image sent by a client, pass this image to the C++ application and return (using the webservice) a message to the client, based on the result of C++ application.
Is this possible?
Any example or guideline?
Thanks in advance
EDIT: Solved using Thrift thrift.apache.org
I read something about Thrift .. but i think maybe i can't use to solve this problem (maybe) ..
The idea is use a mobile application (iOS and/or Android) where the user can upload an image to the service. The service take the image and make some image processing, this part (the processing) was written with C++ as standalone application that receive an image and return a message, so when the processing is done, the service receive the result (a message) from the processing app and return this to the mobile application.
So.. is this possible with Thrift (if so, i need to read more)? o i need to use something else?
Thanks in advance
I have never done that before, but I think you should take a look at Thrift which was initially developed by Facebook and allows you to make multiple languages work together via RPC calls.
Thrift allows you to define data types
and service interfaces in a simple
definition file. Taking that file as
input, the compiler generates code to
be used to easily build RPC clients
and servers that communicate
seamlessly across programming
languages.
I encourage you to search on Google with the following keywords : thrift C++ rails webservice etc.