The parameters in to trace, and attributes out of trace, are put into 32 bit registers. Those registers are a precious resource, so the API is making it easy to see & understand how many you are using. Since pointers are 64 bits, they need to be passed using 2 registers.
I’m not sure about the coordinate system you’re referring to, are you looking at one of the SDK samples?
There isn’t a function in OptiX to generate random ray directions, you will want to carefully control both your random number generation and your mapping of random numbers to directions. The OptiX samples, however, do have examples of some ways you can do this that you can copy. Take a look at the samples_exp/optixPathTracer sample. Inside __closesthit__radiance() in optixPathTracer.cu is code to generate two random floats, and map them to the unit hemisphere with a cosine weighting, and then transform that sample to an arbitrary normal using an orientation given by the Onb() function. That’s probably a bit more complicated than what you’re asking for, but depending on what you need, your process for generating random ray directions might look somewhat similar.